El ejemplo Nodo Collector contiene un flujo de mensajes con dos nodos Collector.
El ejemplo se basa en el siguiente escenario:
La factura de un pedido se genera obteniendo entrada de tres orígenes:
El diagrama siguiente muestra el 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 obtiene entrada de los siguientes tres orígenes:
<Invoice> <CustomerNumber>111</CustomerNumber> <Product>Toaster</Product> <Quantity>1</Quantity> <UnitPrice>4.99</UnitPrice> </Invoice>
<Order><OrderNumber>111</OrderNumber><Product>Tostadora</Product><Quantity>1</Quantity><Delivery>2 días</Delivery></Order>
<Packaging> <CustomerNumber>111</CustomerNumber> <Postage>1.95</Postage> </Packaging>
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:
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:
<Invoice> <CustomerNumber>111</CustomerNumber> <Product>Toaster</Product> <Quantity>1</Quantity> <UnitPrice>4.99</UnitPrice> </Invoice>La Vía de acceso de correlación establecida en el terminal de entrada IN1 está establecida en $Body/Invoice/CustomerNumber de forma que el valor de correlación en los datos de entrada anteriores es el número de cliente 111.
La Vía de acceso de correlación definida en el terminal de entrada IN2 está establecida en $LocalEnvironment/File/Name. El Patrón de correlación definido en el terminal de entrada IN2 está establecido en * .order.
El nodo FileInput establece $LocalEnvironment/File/Name en el nombre del archivo que se lee. En el ejemplo, este valor está establecido en 111.order. Si utiliza este valor para la Vía de acceso de correlación, junto con el patrón comodín *.order, para Patrón de correlación, puede correlacionar la entrada en el terminal de entrada IN2 con el número de cliente 111.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.