Padrão do Message Splitter

Use um padrão do Message Splitter para dividir uma mensagem XML grande em elementos menores para processamento por um ou mais destinos.

Diagrama mostrando o comportamento do padrão.

O Contexto

Você deseja compartilhar informações que se acumularam em um aplicativo durante um período de tempo com outros aplicativos. Exemplos típicos podem ser dados de vendas que se acumularam durante um dia ou atualizações de informações que são recebidas de parceiros. Os dados são acumulados durante um determinado período de tempo e transmitidos como uma única mensagem grande. No final do dia, o processamento no aplicativo de destino, ou aplicativos de destino, requer que cada elemento seja processado individualmente.

Alternativamente, um aplicativo pode gerar uma mensagem contendo vários registros que devem ser distribuídos; por exemplo, onde um aplicativo mantém e distribui dados de referência.

O Problema

Mensagens grandes que contêm estruturas repetitivas de processamento podem causar uso de memória excessivo, o que tem um impacto em potencial em outros processos de mensagens e pode resultar em falha do broker. Este padrão aborda o problema de roteamento dos elementos de uma mensagem grande para diferentes destinos de acordo com as regras de roteamento definidas.

Orientação de Seleção

Use este padrão para aplicativos que armazenam informações sobre várias transações de negócios e transmitem estas informações para um ou mais aplicativos de destino nos lotes. Isto pode ser usado para manipular mensagens grandes sem uso de memória excessivo.

Este padrão pode ser usado quando o aplicativo de origem ou aplicativos de destino não podem fazer ou processar chamadas de serviço quase em tempo real ou quando o armazenamento em lote de informações é necessário por motivos comerciais.

Solução

A solução é implementar um fluxo de mensagens que usa uma árvore de mensagens mutável, para que elementos repetíveis possam ser excluídos conforme são processados. A análise parcial permite que elementos únicos sejam analisados conforme necessário e, como estes elementos são excluídos na conclusão, a árvore na memória é impedida de crescer de forma linear com o número de elementos. Conforme cada elemento é extraído, ele é roteado para o aplicativo de destino apropriado.

A mensagem de entrada e todas as mensagens de saída são processadas em uma única transação; todas as mensagens de saída são persistentes. Uma falha na leitura da mensagem de entrada XML faz com que a transação inteira falhe, mas erros ao processar um único elemento podem incluir o elemento com falha em uma fila para processamento posterior ou fazer com que a transação inteira falhe.