Ampliación del ejemplo de tiempo de espera excedido

Un nodo TimeoutControl se asocia a un nodo TimeoutNotification al configurar ambos nodos con el mismo identificador. El ejemplo ControlledTimeout muestra que se puede asociar más de un nodo TimeoutControl a un nodo TimeoutNotification. Este caso de ejemplo significa que puede actualizar o cancelar peticiones de tiempo de espera que se han procesado a través de un nodo TimeoutControl utilizando cualquiera de los nodos TimeoutControl que se han asociado al mismo nodo TimeoutNotification.

Si desea intentar llevar a la práctica este caso de ejemplo, el método más simple es editar los archivos de cancelación .mbtest, que se graban en la otra cola de entrada de forma que los procese el otro nodo. Una opción más avanzada es cambiar el campo AllowOverwrite en la petición de tiempo de espera por TRUE, lo que significa que el nodo TimeoutControl descarta la petición de tiempo de espera que se ejecuta actualmente en favor de la nueva entrada uno (que coincide en el código Identificador en la petición de tiempo de espera propiamente dicha). También puede crear nuevos mensajes de petición de tiempo de espera excedido con identificadores de tiempo de espera excedido distintos para probar el proceso de varios tiempos de espera excedidos concurrentes.

En el ejemplo, la petición de tiempo de espera excedido está contenida en el cuerpo del mensaje. Es posible pasarla a cualquier lugar del árbol de mensaje y, a menos que se indique lo contrario durante la configuración, el nodo TimeoutControl la busca en el entorno local. Para utilizar este método, debe añadirse un nodo Compute en alguna parte antes del nodo TimeoutControl para introducir esta información, como muestra este ESQL, que también muestra cómo se puede establecer el identificador de tiempo de espera excedido para que sea dinámico y evitar conflictos:

CREATE COMPUTE MODULE Timeout_Set
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot = InputRoot;
SET OutputLocalEnvironment.TimeoutRequest.Action = 'SET';
SET OutputLocalEnvironment.TimeoutRequest.Identifier = OutputRoot.XMLNSC.Data.UniqueId;
SET OutputLocalEnvironment.TimeoutRequest.StartDate = 'TODAY';
SET OutputLocalEnvironment.TimeoutRequest.StartTime = 'NOW';
SET OutputLocalEnvironment.TimeoutRequest.Count = 10;
SET OutputLocalEnvironment.TimeoutRequest.Interval = 5;
RETURN TRUE;
END;
END MODULE;

No olvide establecer el nodo Compute en Pass Message and LocalEnvironment. A continuación, deberá cambiar el nodo TimeoutControl para que tenga una Ubicación de petición en blanco, si se ha modificado del valor predeterminado:

Ubicación de peticiones del nodo Timeout Control

Este ESQL muestra cómo establecer un tiempo de espera único de 60 segundos en el futuro generando una hora relativa:

CREATE COMPUTE MODULE UT_CONTROL_TIMEOUT_10
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
SET OutputRoot = InputRoot;
DECLARE jump INTERVAL;
SET jump = INTERVAL '60' SECOND;
DECLARE start TIME;
SET start = CURRENT_TIME + jump;
SET OutputLocalEnvironment.TimeoutRequest.Action = 'SET';
SET OutputLocalEnvironment.TimeoutRequest.Identifier = 'control';
SET OutputLocalEnvironment.TimeoutRequest.StartDate = 'TODAY';
SET OutputLocalEnvironment.TimeoutRequest.StartTime = start;
RETURN TRUE;
END;
END MODULE;

Volver a la página inicial del ejemplo