A amostra Collector Node contém um fluxo de mensagens com dois nós Collector.
A amostra é baseada no seguinte cenário:
A fatura para um pedido é gerada obtendo a entrada a partir de três origens:
O diagrama a seguir mostra o fluxo de mensagens CollectorNodeSampleFlow:
O primeiro nó Collector no fluxo de mensagens demonstra:
O segundo nó Collector no fluxo de mensagens demonstra:
O símbolo de aviso exibido nos nós Collector no diagrama indica que os terminais Catch não estão conectados.
O fluxo de mensagens utiliza a entrada a partir das três origens a seguir:
<Invoice> <CustomerNumber>111</CustomerNumber> <Product>Toaster</Product> <Quantity>1</Quantity> <UnitPrice>4.99</UnitPrice> </Invoice>
<Order><OrderNumber>111</OrderNumber><Product>Torradeira</Product><Quantity>1</Quantity><Delivery>2 dias</Delivery></Order>
<Packaging> <CustomerNumber>111</CustomerNumber> <Postage>1.95</Postage> </Packaging>
A entrada a partir dos três nós de entrada é eviada para o primeiro nó Collector no fluxo, CollectByCustNum, que é configurado para concluir uma coleta quando uma mensagem a partir de cada origem de entrada corresponda aos critérios configurados no nó Collector.
A correspondência por padrão pode ser utilizada para correlacionar mensagens em uma coleta de mensagens com base no conteúdo dos dados de entrada. A correspondência por padrão pode ser definida em um terminal de entrada específico. A correspondência de padrão configurada em cada terminal de entrada pode usar dois campos para configurar a correspondência de padrão:
No nó coletor, a correspondência por padrão é configurada na tabela Definição da coleta. É possível encontrar esta tabela na página Básica da visualização Propriedades.
O nó Collector, CollectByCustNum, possui três terminais de entrada para coletar a entrada a partir dos três nós de entrada:
O diagrama a seguir mostra os três terminais de entrada:
No CollectByCustNum, a entrada a partir do nó MQInput, MQ COLL_IN1, e o nó FileInput, fileinput, são correlacionados no CustomerNumber. Nenhuma correspondência de padrão é necessária no terminal de entrada IN3, em vez disso, a entrada a partir do nó MQInput, MQ COLL_IN3, contém um preço de postagem que é incluído em cada coleta.
No exemplo a seguir, o CustomerNumber é 111. A entrada para os três terminais de entrada é:
<Invoice> <CustomerNumber>111</CustomerNumber> <Product>Toaster</Product> <Quantity>1</Quantity> <UnitPrice>4.99</UnitPrice> </Invoice>O Caminho de Correlação configurado no terminal de entrada IN1 está configurado para $Body/Invoice/CustomerNumber, de forma que o valor de correlação nos dados de entrada anteriores seja o número de cliente 111.
O Caminho de Correlação configurado no terminal de entrada IN2 está definido como $LocalEnvironment/File/Name. O Padrão de Correlação configurado no terminal de entrada IN2 está definido como * .order.
O nó FileInput configura $LocalEnvironment/File/Name para o nome do arquivo lido. No exemplo, este valor é configurado como 111.order. Usando essa configuração para o Caminho de Correlação, juntamente com o padrão de curinga *.order, para o Padrão de Correlação, é possível fazer a correlação da entrada no terminal de entrada IN2 com o número de cliente 111.As coletas de mensagens são criadas com subárvores que contêm o pedido original, informações de entrega do armazém e um preço de postagem.
A coleta de mensagens concluída é propagada para o nó Compute, Compute1, que combina a entrada para criar uma nova mensagem de fatura. Este nó Compute executa as seguintes tarefas:
A nova mensagem criada pelo nó Compute, possui a seguinte estrutura:
<Invoice> <CustomerNumber>111</CustomerNumber> <Product>Torradeira</Product> <Quantity>1</Quantity> <Price>8,94</Price> <Delivery>2 dias</Delivery> </Invoice>
A mensagem de fatura criada em Compute1 é propagada para o segundo nó Collector no fluxo de mensagens CollectUntilTrigger. Esse nó Collector tem um terminal de entrada chamado IN4. Nesse nó Collector, a propriedade Tempo Limite é usada para concluir coletas de mensagens, em vez de a propriedade Quantidade que é usada pelo primeiro nó Collector. A propriedade Timeout é configurada para 30 segundos para que todas as mensagens recebidas dentro do período de tempo limite de 30 segundos formem uma coleta concluída.
A coordenação de eventos também está ativada neste nó. Um nó Timeout Notification é conectado ao terminal Control do nó Collector. Portanto, as coletas concluídas não são propagadas para o próximo nó do fluxo até o terminal de controle ser acionado pelo nó TimeoutNotification. O nó TimeoutNotification é configurado para enviar uma mensagem a cada 90 segundos.
As coletas das mensagens são enviadas para um nó Compute, Compute2. O nó Compute obtém os dados de mensagem de cada coleta e inclui as informações de horário e data para formar a mensagem de saída final. Cada coleta pode conter mais de uma fatura, dependendo do número de mensagens de fatura que foram incluídas em cada coleta no nó Collector, CollectUntilTrigger.
A mensagem de saída final está no seguinte formato:
<Invoices> <Invoice> <InvoiceNumber>111</InvoiceNumber> <Product>Torradeira</Product> <NumberOrdered>1</NumberOrdered> <TotalCost>9,94</TotalCost> <Delivery>2 dias</Delivery> </Invoice> <Invoice> <InvoiceNumber>222</InvoiceNumber> <Product>Processador de Alimentos</Product> <NumberOrdered>2</NumberOrdered> <TotalCost>75,93</TotalCost> <Delivery>4 dias</Deliver> </Invoice> <Date>10-08-2007</Date> <Time>17:18:22</Time> </Invoices>
Observe no fluxo de mensagens que um nó Compute segue cada nó Collector. Deve-se ter um nó Compute ou um nó JavaCompute após um nó Collector, pois somente esses nós podem analisar a árvore de mensagens propagada por um nó Collector. É possível usar um nó Compute ou um nó JavaCompute para pegar partes de mensagens da coleta de mensagens e para gerar novas mensagens que podem ser processadas por outros nós em seu fluxo de mensagens.