Puede cambiar la secuencia de los
mensajes recibidos de WebSphere MQ, para que se
propaguen en el orden correcto utilizando un número de secuencia definido en un mensaje XML.
En esta tarea de ejemplo, la secuencia se define como que empieza en el número de secuencia 0 (que es el valor predeterminado) y que finaliza cuando no se recibe ningún mensaje nuevo en el grupo en 60 segundos. El flujo de mensajes está configurado de forma que los mensajes pueden llegar desordenados, pero el nodo Resequence intenta propagarlos en el orden correcto. Si un mensaje necesario de la secuencia no llega en 10 segundos, el nodo Resequence salta este mensaje y propaga el siguiente mensaje de la secuencia, aunque no sea el orden correcto.
Los pasos siguientes muestran cómo escribir un flujo de mensajes que pueda recibir el documento XML de WebSphere MQ, reordenar los mensajes en base a un número de secuencia en un mensaje XML (en este ejemplo, se utiliza la vía de acceso $Root/XMLNSC/Doc/SeqNo) y escribirlo en una cola de WebSphere MQ:
- Cree un flujo de mensajes denominado Resequence_Task2, que contenga un
nodo MQInput, un nodo Resequence y un nodo MQOutput. Para obtener más información sobre cómo realizar esta operación,
consulte Crear un flujo de mensajes.
- Conecte el terminal de salida del nodo
MQInput al terminal de entrada de un
nodo
Resequence.
- Conecte los terminales Out (de salida), Missing (que falta) y Expire (de caducidad) del nodo
Resequence al terminal In (de entrada) de un
nodo
MQOutput.
- Establezca las propiedades siguientes del nodo MQInput:
- En el separador Básicas, establezca la
propiedad Detalles de la conexión en
RESEQUENCE_TASK2_IN1.
- En el separador Análisis de mensaje de entrada, establezca la propiedad Dominio de mensaje en XMLNSC.
- En el nodo Resequence,
establezca las siguientes propiedades en el separador Básicas:
- Establezca la propiedad Vía de acceso al número de secuencia a $Root/XMLNSC/Doc/SeqNo
- Establezca la propiedad Tiempo de espera de mensajes que faltan a 10
- Establezca la propiedad Definición de fin de secuencia al valor Automático con el valor
60.
- En el nodo MQOutput,
establezca la propiedad Nombre de
cola (en el separador Básicas) a
RESEQUENCE_TASK2_OUT1.
- Guarde el flujo de mensajes.
Proceso de mensajes en el flujo de mensajes:
Esta sección describe la forma en que el
nodo Resequence procesa los mensajes que entran en el flujo de mensajes:
- Llegan los siguientes mensajes a la cola RESEQUENCE_TASK2_IN1 de WebSphere MQ:
<Doc><SeqNo>0</SeqNo></Doc>,<Doc><SeqNo>1</SeqNo></Doc>,<Doc><SeqNo>2</SeqNo></Doc>,
<Doc><SeqNo>3</SeqNo></Doc>,<Doc><SeqNo>4</SeqNo></Doc>,<Doc><SeqNo>5</SeqNo></Doc>,
<Doc><SeqNo>6</SeqNo></Doc>,<Doc><SeqNo>7</SeqNo></Doc>,<Doc><SeqNo>8</SeqNo></Doc>,
- El nodo Resequence recibe en primer lugar el mensaje con el número de secuencia 0. El nodo Resequence crea un nuevo grupo de secuencia para gestionar el proceso de reordenación; el nuevo grupo de secuencia es un grupo predeterminado porque no se ha definido ningún grupo de secuencia en el mensaje. El mensaje (con número de secuencia 0) es el primero de la secuencia, por lo que se propaga al terminal de salida.
- A continuación, el nodo Resequence recibe el resto de mensajes hasta el número de secuencia 8 incluido y los propaga en el orden en que han llegado.
Cada mensaje se almacena antes de ser propagado y se utiliza una transacción distinta para propagar mensajes en sentido descendente desde el nodo Resequence.
- Pasados sesenta segundos se cierra el grupo de secuencia.
- Llegan los siguientes mensajes al nodo RESEQUENCE_TASK2_IN1 de WebSphere MQ:
<Doc><SeqNo>0</SeqNo></Doc>,<Doc><SeqNo>3</SeqNo></Doc>,<Doc><SeqNo>2</SeqNo></Doc>,
<Doc><SeqNo>4</SeqNo></Doc>,<Doc><SeqNo>6</SeqNo></Doc>,<Doc><SeqNo>7</SeqNo></Doc>,
- Primero, el nodo Resequence recibe el mensaje que contiene el número de secuencia 0. Entonces el nodo Resequence crea un nuevo grupo de secuencia (predeterminado) y propaga el mensaje con el número de secuencia 0 al terminal de salida.
- El siguiente mensaje contiene el número de secuencia 3, que está fuera de secuencia.
La propiedad Tiempo de espera de mensajes que faltan está establecida
en el nodo Resequence con un valor de 10 segundos y el temporizador empieza a contar.
- Llega el número de secuencia 2, que aún no es el siguiente mensaje pero tiene un número inferior al mensaje más bajo que hay almacenado actualmente, por lo tanto, se restablece el temporizador de mensajes que faltan.
- Después, el nodo Resequence recibe el resto de mensajes, todos los cuales tienen un número de secuencia más alto que 2, por lo cual se almacenan pero no se propagan. Esta vez el temporizador de mensajes que faltan no se restablece porque todos los mensajes son posteriores en la secuencia al que tiene el número 2.
- El número de secuencia 1 no llega durante el periodo especificado y, transcurridos 10 segundos, expira el tiempo de espera.
- El nodo Resequence propaga todos los mensajes que tiene almacenados, empezando por el que tiene un número de secuencia inferior (en este caso, el 2) y seguido de todos los demás mensajes hasta el siguiente número que falta en la secuencia (en este caso, los mensajes con los números de secuencia 3 y 4). Los mensajes 2, 3 y 4 se propagan al terminal de caducidad.
- El nodo Resequence se transfiere a estado desordenado para este grupo de secuencia y no propagará más mensajes en este grupo al terminal de salida. El nodo Resequence permanece en estado desordenado hasta que el grupo caduca y se cierra.
- Transcurridos otros 10 segundos, el temporizador de mensajes que faltan vuelve a expirar y se propagan los mensajes 6 y 7 al terminal de caducidad.
En este momento ya no faltan más mensajes, con lo cual el temporizador de mensajes que faltan no se vuelve a iniciar.
- El temporizador de caducidad de grupo se inicia y, transcurridos 60 segundos, se cierra el grupo. El temporizador de caducidad de grupo no se inicia nunca si el temporizador de mensajes que faltan se está ejecutando.