Ampliación del ejemplo de tiempo de espera excedido

Un nodo Timeout Control se asocia a un nodo Timeout Notification al configurar ambos nodos con el mismo identificador. El ejemplo ControlledTimeout muestra que se puede asociar más de un nodo Timeout Control a un nodo Timeout Notification. Esto significa que se pueden actualizar o cancelar las peticiones de tiempo de espera excedido procesadas a través de un nodo Timeout Control utilizando cualquier otro nodo Timeout Control asociado al mismo nodo Timeout Notification. Inténtelo - el método más sencillo es editar los archivos de colocación en cola de cancelación que han de grabarse en la otra cola de entrada. De este modo los procesará el otro nodo. Una opción más avanzada consiste en cambiar el campo <AllowOverwrite> en la petición de tiempo de espera excedido a TRUE, lo que significa que el nodo Timeout Control desechará la petición de tiempo de espera excedido que se está ejecutando en ese momento a favor de la nueva petición entrante (que coincide en el código <Identifier> en la petición de tiempo de espera excedido 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 sitio del árbol de mensaje y, a menos que se indique lo contrario durante la configuración, el nodo Timeout Control la buscará en LocalEnvironment. Para utilizar este método, ha de añadirse un nodo Compute en alguna parte antes del nodo Timeout Control 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.XML.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". Después, deberá cambiar el nodo Timeout Control para que tenga una Request Location en blanco, si se ha cambiado el valor por omisión:

Request Location del nodo Timeout Control

Finalmente, este ESQL muestra cómo establecer un futuro tiempo de espera excedido de apagado de 60 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;

Icono de la página principal   Volver a la Página de presentación de ejemplos