El final de una secuencia de mensajes viene determinada por la propiedad Definición de fin de secuencia en los nodos Resequence y Secuencia.
Utilización de un nodo Resequence
Cuando se utiliza el nodo Resequence para reordenar los mensajes en un flujo de mensajes, se utiliza la propiedad Definición de fin de secuencia en el nodo Resequence para definir cómo finalizará la secuencia de mensajes reordenada. Puede
especificar el número de fin de secuencia en el nodo Resequence de una de las siguientes formas:
- Como un número literal
- Seleccione Literal para especificar un número de secuencia literal como fin de secuencia. Este valor puede ser cualquier valor numérico positivo o negativo dentro del rango de -9223372036854775807 a 9223372036854775807. Cuando llega un mensaje con el número de secuencia especificado, se cierra el grupo de secuencia. Si faltan mensajes de la secuencia, el grupo de secuencia permanece abierto durante el periodo de tiempo especificado
en la propiedad Tiempo de espera de mensajes que faltan.
Por ejemplo, suponga que tiene un nodo
Resequence con las siguientes propiedades:
- Propiedad Vía de acceso al número de secuencia con
el valor /doc/seq
- Propiedad Vía de acceso al identificador del grupo de secuencia con
el valor /doc/grp
- Propiedad Definición de inicio de secuencia establecida
en Literal con el valor 0.
- Propiedad Definición de fin de secuencia establecida
en Literal con el
valor 6. Este valor
significa que el grupo se cerrará cuando se reciba un mensaje con el número de secuencia 6
y se hayan recibido todos los mensajes anteriores de la secuencia (o haya caducado el tiempo de espera de mensajes que faltan).
El nodo
Resequence recibe los siguientes mensajes:
<doc><grp>a<grp><seq>6</seq></doc>
<doc><grp>a<grp><seq>5</seq></doc>
<doc><grp>a<grp><seq>4</seq></doc>
<doc><grp>a<grp><seq>3</seq></doc>
<doc><grp>a<grp><seq>2</seq></doc>
<doc><grp>a<grp><seq>1</seq></doc>
<doc><grp>a<grp><seq>0</seq></doc>
Se propagan los siguientes mensajes al terminal de salida:
<doc><grp>a<grp><seq>0</seq></doc>
<doc><grp>a<grp><seq>1</seq></doc>
<doc><grp>a<grp><seq>2</seq></doc>
<doc><grp>a<grp><seq>3</seq></doc>
<doc><grp>a<grp><seq>4</seq></doc>
<doc><grp>a<grp><seq>5</seq></doc>
<doc><grp>a<grp><seq>6</seq></doc>
Una vez cerrado el grupo de secuencia, cualquier otro mensaje que llegue al nodo para ese grupo de secuencia se procesa como parte de una nueva instancia del grupo.
- Mediante un tiempo de espera automático
- Seleccione Automático y especifique
el tiempo (en segundos) durante el cual el nodo espera a que lleguen
nuevos mensajes a una cola vacía. Cada vez que la cola de mensajes
que esperan a ser propagados está vacía, el nodo Resequence inicia un temporizador,
que caduca tras un número especificado de segundos. Si no llegan nuevos mensajes
dentro del tiempo especificado, se cierra el grupo de secuencia y, si después llegan nuevos mensajes, se tratan como parte de un grupo nuevo. Si llegan nuevos mensajes al nodo dentro del límite de tiempo especificado, el temporizador se restablece.
- Utilizando el predicado establecido en el nodo Resequence
- Seleccione Predicado y especifique una expresión XPath para calcular si el mensaje es el último de la secuencia. El predicado se evalúa a True o False,
y se siguen recopilando mensajes mientras la expresión se evalúa a False. Cuando la expresión de un mensaje se evalúa a True, indica que el mensaje es el último y el grupo de secuencia se cierra. Sin embargo, si faltan mensajes anteriores del grupo de secuencia, el grupo de secuencia permanece permanece abierto durante el periodo de tiempo especificado
en la propiedad Tiempo de espera de mensajes que faltan.
Una vez cerrado el grupo de secuencia, cualquier otro mensaje que llegue al nodo para ese grupo de secuencia se procesa como parte de una nueva instancia del grupo.
Generalmente, la expresión XPath se evalúa a un Booleano; sin embargo, si se devuelven otros tipos de datos, el predicado se determina de la siguiente forma:
Tabla 1. Tipo de datos devueltos |
True |
False |
Boolean (booleano) |
True |
False |
Numeric (numérico) |
Cualquier valor distinto de cero |
0 o 0.0 |
String (serie) |
Cualquier serie que coincida con true (no sensible a mayúsculas y minúsculas) |
Cualquier serie que no coincida con true (no sensible a mayúsculas y minúsculas) |
NodeSet (Conjunto de nodos) |
Nunca |
Siempre |
Cuando un mensaje evalúa la expresión a True (y, por tanto, se identifica como el fin de la secuencia), el nodo comprueba que el mensaje tenga el número de secuencia más alto recopilado hasta ese momento. Si se encuentran mensajes con números de secuencia más altos, se genera una excepción.
Utilizando un nodo Secuencia
Cuando se utiliza el
nodo Secuencia para añadir números de secuencia a mensajes, se utiliza la propiedad Definición de fin de secuencia para definir
cómo finalizará la secuencia de mensajes. El nodo Secuencia asigna un número de secuencia que aumenta de forma monotónica para cada mensaje de entrada que llega al nodo, terminando con el número de secuencia que ha definido en la propiedad Definición de inicio de secuencia.
Puede
especificar el número de fin de secuencia en el nodo Secuencia de una de las siguientes formas:
- Como un número literal
- Seleccione Literal y
especifique un valor numérico positivo o negativo como número de fin de secuencia (por ejemplo, 15). El valor debe estar dentro del rango de -9223372036854775807
a 9223372036854775807. La secuencia creciente monotónica termina cuando llega al número de fin de secuencia especificado por esta propiedad.
- Utilizando el predicado establecido en el nodo Secuencia
- Seleccione Predicado para
especificar que la secuencia termina cuando la expresión XPath se evalúa a True. Para obtener más información, consulte la tabla anterior.
- Mediante un tiempo de espera automático
- Seleccione Automático y especifique
el tiempo (en segundos) durante el cual el nodo espera a que lleguen
nuevos mensajes después de que se haya propagado un mensaje para ese grupo de secuencia.
Si llega un mensaje nuevo, el temporizador se cancela y se restablece cuando
se propaga el mensaje. Si no llegan nuevos mensajes
dentro del tiempo especificado, se cierra el grupo de secuencia y, si después llegan nuevos mensajes, se tratan como parte de un grupo nuevo.