Sobre el ejemplo Nodo Collector

El ejemplo Nodo Collector contiene un flujo de mensajes con dos nodos Collector.

El ejemplo se basa en el siguiente escenario:

  1. El flujo crea un registro de facturas a partir de tres partes independientes de un pedido de cliente específico (detalles del pedido de cliente, información del almacén y costes de envío).
  2. El flujo agrupa todas las facturas en lotes que se enviarán a intervalos de 90 segundos.

La factura de un pedido se genera obteniendo entrada de tres orígenes:

El diagrama siguiente muestra el flujo de mensajes CollectorNodeSampleFlow:

Captura de pantalla del flujo de mensajes CollectorNodeSampleFlow

El primer nodo Collector del flujo de mensajes muestra cómo:

El segundo nodo Collector del flujo de mensajes muestra cómo:

El símbolo de aviso que aparece en los nodos Collector del diagrama indica que los terminales Catch (de captación) no están conectados.

El flujo de mensajes CollectorNodeSampleFlow

Entrada de flujo de mensajes

El flujo de mensajes obtiene entrada de los siguientes tres orígenes:

La entrada de los tres nodos de entrada se envía al primer nodo Collector del flujo, CollectByCustNum, que está configurado para completar una colección cuando un mensaje de cada origen de entrada cumple los criterios configurados en el nodo Collector.

La coincidencia de patrón puede utilizarse para correlacionar mensajes de una colección de mensajes basándose en el contenido de los datos entrantes. La coincidencia de patrón se puede definir en un terminal de entrada específico. La coincidencia de patrón que está configurada en cada terminal de entrada puede utilizar dos campos para establecer la coincidencia de patrón:

En el nodo Collector, la coincidencia de patrón se establece en la tabla Definición de colección. Puede encontrar esta tabla en la página Básicas de la vista Propiedades.

El nodo CollectByCustNum Collector tiene tres terminales de entrada para recopilar entradas de los tres nodos de entrada:

El diagrama siguiente muestra los tres terminales de entrada:

Captura de pantalla del nodo CollectByCustNum Collector

En CollectByCustNum, la entrada del nodo MQInput MQ COLL_IN1 y del nodo FileInput fileinput se correlacionan con CustomerNumber. No se requiere ninguna coincidencia de patrón en el terminal de entrada IN3, en su lugar la entrada del nodo MQ COLL_IN3 contiene un precio de envío que se añade a cada colección.

En el ejemplo siguiente, el número de cliente (CustomerNumber) es 111. La entrada para los tres terminales de entrada es:

Las colecciones de mensajes se crean con subárboles que contienen el pedido original, información de entrega del almacén y un precio de envío.

La colección de mensajes completada se propaga al nodo Compute, Compute1, que combina la entrada para crear un mensaje de factura nuevo. Este nodo Compute realiza las tareas siguientes:

El nuevo mensaje que crea el nodo Compute tiene la estructura siguiente:

<Invoice>
    <CustomerNumber>111</CustomerNumber>
    <Product>Tostadora</Product>
    <Quantity>1</Quantity>
    <Price>8,94</Price>
    <Delivery>2 días</Delivery>
</Invoice> 

El mensaje de factura que se crea en Compute1 se propaga al segundo nodo Collector del flujo de mensajes, CollectUntilTrigger. Este nodo Collector tiene un terminal de entrada llamado IN4. En este nodo Collector se utiliza la propiedad Timeout (de tiempo de espera) para completar las colecciones de mensajes, en lugar de la propiedad Cantidad que la utiliza el primer nodo Collector. La propiedad Timeout (de tiempo de espera) se establece en 30 segundos para que todos los mensajes recibidos dentro del período de tiempo de espera de 30 segundos forman una colección completada.

La coordinación de sucesos también está habilitada en este nodo. Un nodo Timeout Notification está conectado al terminal Control del nodo Collector. Por lo tanto, las colecciones completadas no se propagan al siguiente nodo del flujo de mensajes hasta que el nodo TimeoutNotification activa el terminal de control. El nodo TimeoutNotification está establecido para enviar un mensaje cada 90 segundos.

Las colecciones de mensajes se envían a un nodo Compute, Compute2. El nodo Compute toma los datos de mensaje de cada colección y añade información de fecha y hora para formar el mensaje de salida final. Cada colección puede contener más de una factura, dependiendo del número de mensajes de factura que se añadan a cada colección en el nodo Collector CollectUntilTrigger.

El mensaje de salida final tiene el formato:

<Invoices>
  <Invoice>
     <InvoiceNumber>111</InvoiceNumber>
      <Product>Tostadora</Product>
     
<NumberOrdered>1</NumberOrdered>
      <TotalCost>9,94</TotalCost>
      <Delivery>2 días</Delivery>     
 </Invoice>
  <Invoice>
     <InvoiceNumber>222</InvoiceNumber>
      <Product>Robot
de cocina</Product>
     
<NumberOrdered>2</NumberOrdered>
      <TotalCost>75,93</TotalCost>
      <Delivery>4
días</Deliver>     
 </Invoice>
 <Date>2007-08-10</Date>
 <Time>17:18:22</Time>
</Invoices>

Observe en el flujo de mensajes que hay un nodo Compute a continuación de cada nodo Collector. Debe tener un nodo Compute o un nodo JavaCompute después de un nodo Collector, ya que sólo estos nodos pueden analizar el árbol de mensaje que propaga un nodo Collector. Puede utilizar un nodo Compute o un nodo JavaCompute para obtener partes de mensaje de la colección de mensajes y generar nuevos mensajes que puedan ser procesados por otros nodos del flujo de mensajes.

Volver a la página inicial del ejemplo