lunes, 25 de agosto de 2014

IBM Integration Bus (IIB) MQ retry and requeue tests

In this post I discuse a basic configuration that can be used to implement flow retry and requeue using MQ and IIB 9 (previously known as WebSphere Message Broker).

1. Input MQ Queue is persistent.


2. Input "MQ Input" node is transactional.



3. Input MQ Queue's backout threshold value is greater than 0 and has a backout requeue configured.


The Backout threshold property is also known as BOTHRESH. The Backout requeue queue property is also known as BOQNAME.

You can also set those values using runmqsc. For example:

runmqsc XXX_QMGR
ALTER QLOCAL(XXX_DEFAULT_QUEUE) BOTHRESH(10)
DISPLAY queue(XXX_DEFAULT_QUEUE)

The Backout threshold value represents the "number of retries" (in each "retry", the message is requeue in the same input Queue). Once the Backout threshold is reached, the message is enqueued in the Backout requeue queue. If no Backout requeue queue is configured, the message is enqueued in the queue manager's Dead-letter queue. If you configure neither, the first time a message reaches the Backout threshold, the queue will keep accepting new messages, but they won't be dequeued by your flow; you'll see this message in your event log (here, in spanish):
( XXX_BRK.XXX_EG ) No hay definida ninguna cola de reposición en cola para restitución ni cola de mensajes no entregados (DLQ) para restituir un mensaje; nodo Input (de entrada) 'In.MQ Input' recibido de la cola ''XXX_DEFAULT_QUEUE''.   
El nodo de entrada 'In.MQ Input' ha recibido un mensaje procedente de la cola ''XXX_DEFAULT_QUEUE'', pero se ha visto obligado a intentar una restitución debido a la detección de una condición de anomalía interna asociado al mismo. El intermediario de mensajes ha intentado ahora propagar el mensaje al 'nombre de cola de reposición en cola para restitución' o la cola de mensajes no entregados, pero ninguna de estas colas existe. El flujo de mensajes dejará de procesar el mensaje y continuará restituyéndose periódicamente.  Esta situación puede hacer que se acumulen en la cola de entrada hasta que el mensaje en cuestión se elimine o se procese correctamente.   
Examine los mensajes anteriores y posiblemente el flujo de mensajes para determinar el motivo por el cual el mensaje se está restituyendo.  Si se define la cola de reposición en cola para restitución ('backoutRequeueQueue') o la cola de mensajes no entregados, el mensaje se propagará a una de dichas colas.  
When yo do configure a  Backout requeue queue, the message is as following:
( XXX_BRK.XXX_EG ) El mensaje se ha restituido a una cola; nodo 'In.MQ Input'.
El nodo 'In.MQ Input' ha recibido un mensaje que se había restituido previamente una o más veces debido a un proceso de error en la vía de acceso principal del flujo de mensajes. El terminal de anomalías (failure terminal) no está conectado, por lo que el intermediario de mensajes está transfiriendo el mensaje directamente a la cola de reposición en cola o a la cola de restituciones de mensajes no entregados asociada a este nodo. La cuenta de restituciones ('backoutCount') del MQMD del mensaje es ahora igual al umbral de restituciones ('backoutThreshold') definido para la cola de entrada de WebSphere MQ.
Examine los mensajes anteriores y el flujo de mensajes para determinar el motivo por el cual el mensaje se restituye.  Corrija esta situación si es posible.  Lleve a cabo todos los procesos de recuperación locales que sean necesarios.

4. When the flow wants to requeue and retry the current message, an unhandled exception has to be thrown in the flow and it has to reach the MQ Input node without being handled.

For example:

Compute:

Each time the message is "retried", the value of MQMD.BackoutCount is increased. You can easily determine if a message is a retry, checking if the value of MQMD.BackoutCount is greater than 0.



5. Delay

There's no configuration to specify a "retry delay" (reference). It can for example be implemented  executing a pause after checking if the value of MQMD.BackoutCount is greater than 0.

References:


No hay comentarios: