El ejemplo de Proceso del tiempo de espera excedido muestra la utilización de la función de tiempo de espera excedido proporcionada por los nodos Timeout Control y Timeout Notification. Puede utilizar estos nodos para dirigir automáticamente flujos de mensajes a intervalos regulares - se conocen como tiempos de espera excedidos automáticos. O puede proporcionar tiempos de espera excedidos controlados, por mensaje, a las aplicaciones.
Puede crear tiempos de espera excedidos automáticos con un solo nodo Timeout Notification que se ejecute en modo Automático. Ha de proporcionar un intervalo (en segundos) como parámetro de configuración para determinar el periodo entre invocaciones de flujos adyacentes. Los tiempos de espera excedidos automáticos incluyen:
Se pueden crear tiempos de espera excedidos con uno o más nodos Timeout Control junto con un nodo Timeout Notification. Es necesario asociar los nodos proporcionando el mismo identificador (Identifier) que en el parámetro de la configuración. (Hay una relación de muchos a uno entre los nodos Timeout Control y Timeout Notification - en otras palabras, un solo nodo Timeout Notification procesará las petiviones de tiempo de espera excedido de todos los nodos Timeout Control cuyo identificador coincida.) Los nodos Timeout Control reciben mensajes entrantes que contienen peticiones de tiempo de espera excedido con un formato fijo, que después se validan y almacenan, y que los nodos Timeout Notification procesan cuando han caducado.
Una petición de tiempo de espera excedido tiene un identificador exclusivo dentro del ámbito de nodos Timeout que la procesan. No es igual que el identificador utilizado para asociar nodos Timeout entre ellos. Una petición de tiempo de espera excedido se basa en una una hora de inicio, un intervalo, y una cuenta. Las peticiones de tiempo de espera excedido pueden configurarse para que se inicien en cualquier punto futuro, y para efectuar ping una o más veces con una cuenta de 1 o más. Si la cuenta es mayor que 1, los ping consecutivos están separados por el número de segundos indicado en el intervalo.
El ejemplo de Proceso de tiempo de espera excedido contiene dos flujos de mensajes: AutomaticTimeout y ControlledTimeout.
La figura muestra cómo usar un nodo Timeout Notification en modo automático:
Este flujo se establece para efectuar ping una vez cada diez segundos mientras se está ejecutando el intermediario.
La figura muestra cómo usar juntos los nodos Timeout Control y Timeout Notification. Este único archivo .msgflow contiene dos flujos de mensajes: uno para solicitar los tiempos de espera y otro para procesarlos.
Estos flujos están dirigidos por los mensajes de prueba que se describen a continuación, que contienen peticiones de tiempo de espera excedido y son procesados por los nodos TimeoutAll y TimeoutFragment Timeout Control. Estos nodos validan las peticiones de tiempo de espera excedido y almacenan los mensajes para el nodo Controlled Timeout Notification en el segundo flujo para procesarlos a medida que llegan.
El nodo TimeoutAll almacena todo el mensaje entrante y el nodo TimeoutFragment almacena una parte definida del mensaje entrante. Este comportamiento se controla mediante las propiedades indicadas en la pestaña Mensaje del nodo Timeout Control.
Los cuatro mensajes de prueba usados para dirigir el flujo de mensajes ControlledTimeout son mensajes XML sencillos que contienen detalles de una factura para un cliente. El siguiente XML es un ejemplo de uno de los cuatro mensajes:
<SaleEnvelope>
<Header>
<SaleListCount>1</SaleListCount>
<TimeoutRequest>
<Action>SET</Action>
<Identifier>tentimes</Identifier>
<Count>10</Count>
<Interval>10</Interval>
<AllowOverwrite>FALSE</AllowOverwrite>
</TimeoutRequest>
</Header>
<SaleList>
<Invoice>
<Initial>K</Initial><Initial>A</Initial>
<Surname>Braithwaite</Surname>
<Item>
<Code>00</Code><Code>01</Code><Code>02</Code>
<Description>Twister</Description>
<Category>Games</Category>
<Price>00.30</Price>
<Quantity>01</Quantity>
</Item>
<Item>
<Code>02</Code><Code>03</Code><Code>01</Code>
<Description>The Times Newspaper</Description>
<Category>Books and Media</Category>
<Price>00.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>00.50</Balance>
<Currency>Sterling</Currency>
</Invoice>
<Invoice>
<Initial>T</Initial><Initial>J</Initial>
<Surname>Dunnwin</Surname>
<Item>
<Code>04</Code><Code>05</Code><Code>01</Code>
<Description>The Origin of Species</Description>
<Category>Books and Media</Category>
<Price>22.34</Price>
<Quantity>02</Quantity>
</Item>
<Item>
<Code>06</Code><Code>07</Code><Code>01</Code>
<Description>Microscope</Description>
<Category>Miscellaneous</Category>
<Price>36.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>81.84</Balance>
<Currency>Euros</Currency>
</Invoice>
</SaleList>
<Trailer>
<CompletionTime>12.00.00</CompletionTime>
</Trailer>
</SaleEnvelope>
El campo <TimeoutRequest> insertado la cabecera (<Header>) lo utiliza el nodo Timeout Control para determinar el tiempo de espera excedido solicitado que ha de procesar el nodo Timeout Notification. En este caso, la fecha y hora de inicio no están definidas, por lo que toman los valores por omisión TODAY (hoy) y NOW (ahora). La información especificada en el campo <TimeoutRequest> solicita que el tiempo de espera excedido emita un sonido diez veces, cada diez segundos, antes de terminar.
Dos de los mensajes suministrados contienen peticiones de tiempos de espera excedidos y establecen tiempos de espera excedidos, uno para que emita un sonido diez veces y termine y el otro para que continúe indefinidamente. Los dos otros mensajes de prueba contienen peticiones de concelación para las dos peticiones de tiempo de espera excedido y se procesan del mismo modo.