Antipatrón: Registra datos en servidores de terceros mediante la política de JavaScript

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

El registro es una de las formas eficientes de depurar problemas. La información sobre la solicitud a la API, como encabezados, parámetros de formulario, parámetros de consulta, variables dinámicas, etc., se puede registrar para referencias posteriores. La información se puede registrar de forma local en los procesadores de mensajes (solo Apigee Edge para nube privada) o en servidores de terceros como Sumo Logic, Splunk o Loggly.

Antipatrón

En el siguiente código, se usa el objeto httpClient en una política de JavaScript para registrar los datos en un servidor de Sumo Logic. Esto significa que el proceso de registro se lleva a cabo durante el procesamiento de solicitudes y respuestas. Este enfoque es contraproductivo porque aumenta el tiempo de procesamiento y, por lo tanto, aumenta las latencias generales.

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();

La causa es la llamada a waitForComplete(), que suspende las operaciones del llamador hasta que se complete el proceso de registro. Un patrón válido consiste en eliminar esta llamada para hacer que esta sea asíncrona.

Impacto

  • Ejecutar el código de registro a través de la política de JavaScript aumenta la latencia de la solicitud a la API.
  • Las solicitudes simultáneas pueden forzar los recursos del Message Processor y, en consecuencia, afectar negativamente el procesamiento de otras solicitudes.

Práctica recomendada

  • Usa la política de MessageLogging para transferir o registrar datos en servidores de registros o servicios de administración de registros de terceros, como Sumo Logic, Splunk, Loggly, etcétera.
  • La mayor ventaja de la política de Registro de mensajes es que se puede definir en el flujo posterior de cliente, que se ejecuta después de que la respuesta se envía de vuelta a la app cliente solicitante.
  • Tener esta política definida en el flujo de Post Client ayuda a separar la actividad de registro y el procesamiento de solicitudes y respuestas, lo que evita las latencias.
  • Si hay un requisito específico o un motivo para realizar registros a través de JavaScript (no la opción de flujo de Post Client mencionada anteriormente), entonces debe hacerse de forma asíncrona. En otras palabras, si usas un objeto httpClient, debes asegurarte de que el código JavaScript NO implemente waitForComplete.

Lecturas adicionales