Антипаттерн: регистрация данных на сторонних серверах с помощью правил JavaScript

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

Ведение журналов – один из эффективных способов отладки. Информация о запросе к API, например заголовки, параметры формы, параметры запроса, динамические переменные и т. д., может быть зарегистрирована в журнале для дальнейшего использования. Информация может регистрироваться локально на процессорах сообщений (только в Apigee Edge для частного облака) или на сторонних серверах, например Sumo Logic, Splunk или Loggly.

Антипаттерн

В приведенном ниже коде объект httpClient в правиле JavaScript используется для регистрации данных на сервере Sumo Logic. Это означает, что процесс регистрации фактически происходит во время обработки запроса/ответа. Такой подход неэффективен, поскольку увеличивает время обработки и общую задержку.

LogData_JS:

<!-- /antipatterns/examples/1-4.xml -->
<Javascript async="false" continueOnError="false" enabled="true" timelimit="2000" name="LogData_JS">
  <DisplayName>LogData_JS</DisplayName>
  <ResourceURL>jsc://LogData.js</ResourceURL>
</Javascript>

LogData.js:

<!-- /antipatterns/examples/1-5.xml -->
var sumoLogicURL = "...";
httpClient.send(sumoLogicURL);
waitForComplete();

Причина в вызове waitForComplete(), который приостанавливает операции вызывающего объекта до завершения процесса регистрации. Чтобы сделать этот вызов асинхронным, его можно удалить.

Результат

  • Выполнение кода регистрации с помощью правила JavaScript увеличивает задержку запроса API.
  • Одновременные запросы могут перегрузить ресурсы Message Processor и, следовательно, негативно повлиять на обработку других запросов.

Рекомендации

  • Используйте правило MessageLogging, чтобы передавать данные на серверы журналов или сторонние сервисы управления журналами, такие как Sumo Logic, Splunk, Loggly и т. д.
  • Главное преимущество правил Message Logging заключается в том, что их можно задать в потоке Post Client Flow, который выполняется после отправки ответа в клиентское приложение.
  • Определение этого правила в потоке Post Client помогает разделить ведение журнала и обработку запросов/ответов, что позволяет избежать задержек.
  • Если вам нужно вести журнал с помощью JavaScript (а не с помощью описанного выше потока Post Client), это необходимо делать асинхронно. Другими словами, если вы используете объект httpClient, убедитесь, что JavaScript НЕ реализует waitForComplete.

Дополнительные материалы