Sobre a Amostra Sistema de Mensagens Grande

A amostra Sistema de Mensagens Grande é um aplicativo de amostra de fluxo de mensagens baseado no cenário de processamento dos dados de vendas no final do dia.   As mensagens que registram os detalhes das vendas através do dia são armazenadas em batch juntas para transmissão ao centro de TI.  No recebimento no centro de TI, as mensagens em batch são divididas em suas partes constituintes para processamento subseqüente. Esta divisão é obtida utilizando um fluxo de mensagens do WebSphere Message Broker.  Cada uma das mensagens individuais representando uma venda tem a mesma estrutura.

As mensagens de entrada e saída nessa amostra são implementadas como mensagens XML autodefinidas para simplicidade.  Outros formatos de mensagens poderão ser facilmente utilizados.

Cada mensagem de entrada consiste em três partes:

A estrutura SaleList é complexa.  Ela contém:

O objetivo do processamento nessa amostra é gravar cada uma das instâncias da estrutura SaleList como uma mensagem separada do WebSphere MQ, enquanto minimiza os requisitos de memória globais.  O uso da memória virtual é minimizado excluindo aquelas partes da árvore de mensagens que já foram processadas.  Sem isso, a árvore de mensagens continuará a crescer, conforme cada instância da estrutura SaleList for processada.  

Se a árvore de mensagens continuar a crescer sem qualquer manutenção, isso poderá levar a grandes requisitos de memória virtual para o grupo de execução no qual o  fluxo de mensagens está em execução.  Isto pode se tornar um significante problema de desempenho para mensagens de entrada com um tamanho de vários megabytes e pode levar a um requisito de centenas de megabytes, ou até mesmo de gigabytes, de memória virtual dependendo no tamanho da mensagem de entrada.

A técnica de economia de memória utilizada na amostra requer a utilização de árvores de mensagens mutáveis.  Aquela na qual as partes da árvore de mensagens podem ser excluídas.  A árvore de mensagens para InputRoot é imutável e, como tal, não é possível excluir itens dela, quando necessário.  Então, outra árvore é criada dentro do fluxo de mensagens.  Ela é estabelecida utilizando a variável ESQL  ROW e a chamada de função ESQL CREATE. 

O processamento na amostra consiste em um fluxo de mensagens.  O processamento executado é descrito a seguir.

Fluxo de Mensagens de Sistemas de Mensagens Grandes

O fluxo de mensagens de sistemas de mensagens grandes executa os seguintes processamentos:

  1. Lê uma mensagem do WebSphere MQ que contém uma carga útil XML sob controle transacional.
  2. Formata uma mensagem do WebSphere MQ para cada instância da estrutura SaleList.
  3. Grava as mensagens do WebSphere MQ na fila de saída.
  4. Produz uma mensagem do WebSphere MQ para sinalizar a conclusão do processamento quando o elemento final foi processado

O fluxo de mensagens Sistema de Mensagens Grande consiste dos seguintes nós:

O nó MQInput MessageWithRepeatingElements lê uma mensagem do WebSphere MQ que contém uma carga útil XML. Como a mensagem que chega está em um formato XML autodefinido, não existe necessidade de especificar um conjunto de mensagens ou formato para ela ser analisada com êxito.

O nó Compute ProduceMessageSlicesFromRepeatingElements contém a maioria do processamento para o fluxo de mensagens.  Ele executa os seguintes processamentos:

  1. Cria uma árvore mutável que se tornará uma cópia de InputRoot.XML (a árvore de mensagens para InputRoot é imutável).  Isso é feito para reduzir os requisitos de memória globais do fluxo de mensagens
  2. Cria um analisador XML para a nova árvore de mensagens.
  3. Copia InputRoot.XML para a nova árvore de mensagens.
  4. Obtém o valor no campo SaleListCount que está no cabeçalho da mensagem de entrada.  Esse valor especifica quantos itens SaleList de repetição estão dentro da mensagem.  Ele é verificado junto ao número processado.
  5. Formata uma mensagem do WebSphere MQ para cada instância da estrutura SaleList. 
  6. Envia a mensagem formatada ao longo do restante do fluxo de mensagens para que possa ser gravada como uma mensagem do WebSphere MQ.  Isso é obtido através do uso do verbo PROPAGATE.
  7. Formata e grava uma mensagem do WebSphere MQ para marcar a confirmação do processamento da mensagem SaleEnvelope.

O nó de filtro IdentifyWhenSlicingIsComplete aplica uma expressão de filtro à mensagem que foi propagada no nó ProduceMessageSlicesFromRepeatingElements.  O objetivo do teste é identificar se a mensagem digitada no nó é aquela que deve ser gravada na fila de mensagens SaleList processadas ou a mensagem de confirmação de batch.  Se for uma mensagem que contém um item SaleList, o processamento será transmitido para o nó MQOutput RepeatedElementSlices que gravará a mensagem em uma fila do WebSphere MQ. Se a mensagem recebida no filtro IdentifyWhenSlicingIsComplete for a confirmação de batch, ela será gravada como uma mensagem do WebSphere MQ em uma fila diferente dos itens SaleList utilizando o nó MQOutput MessageSlicingComplete.

Existem nós adicionais no fluxo de mensagens para fornecer processamento para condições de erro diferentes.  O nó MQOutput General Failure é anexado ao terminal de falha do nó MQInput.  O nó gravará a mensagem na fila denominada no nó MQOutput se ocorrer um erro no processamento dentro do nó MQInput. O nó Catch do nó MQInput é conectado a um nó de filtro denominado CatchProcessing.  Uma mensagem será propagada ao longo dessa rota se uma exceção for emitida junto com o fluxo de mensagens e capturada por esse nó.  A expressão de filtro dentro de CatchProcessing determina se a mensagem que está sendo processada tem o formato esperado.  Se não tiver, o processamento será transmitido para o nó Throw Error onde um erro do usuário é emitido.  Se a mensagem estiver malformada de alguma maneira, por exemplo, o último campo não for chamado de SlicingReport, o processamento será transmitido para o nó MQOutput Malformed Messages, onde ele é gravado em uma fila de erros.

Mensagem de Teste

A mensagem de teste utilizada para conduzir a amostra de roteamento de mensagens é uma mensagem XML autodefinida que contém os detalhes da fatura para um cliente.  Você pode estender o tamanho da mensagem repetindo o item SaleList.  A mensagem para a amostra contém dez repetições para o item SaleList.  O layout da mensagem é mostrado a seguir.  Nesse caso, apenas uma única instância de SaleList é mostrada.

<SaleEnvelope>
<Header>
<SaleListCount>1</SaleListCount>
</Header>
<SaleList>
<Invoice>
<Initial>K</Initial>
<Initial>A</Initial>
<Surname>Braithwaite</Surname>
<Item>
<Code>00</Code>
<Code>01</Code>
<Code>02</Code>
<Description>Twister</Description>
<Category>Games</Category>
<Price>00.30</Price>
<Quantity>01</Quantity>
</Item>
<Item>
<Code>02</Code>
<Code>03</Code>
<Code>01</Code>
<Description>The Times Newspaper</Description>
<Category>Books and Media</Category>
<Price>00.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>00.50</Balance>
<Currency>Sterling</Currency>
</Invoice>
<Invoice>
<Initial>T</Initial>
<Initial>J</Initial>
<Surname>Dunnwin</Surname>
<Item>
<Code>04</Code>
<Code>05</Code>
<Code>01</Code>
<Description>The Origin of Species</Description>
<Category>Books and Media</Category>
<Price>22.34</Price>
<Quantity>02</Quantity>
</Item>
<Item>
<Code>06</Code>
<Code>07</Code>
<Code>01</Code>
<Description>Microscope</Description>
<Category>Miscellaneous</Category>
<Price>36.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>81.84</Balance>
<Currency>Euros</Currency>
</Invoice>
</SaleList>
<Trailer>
<CompletionTime>12.00.00</CompletionTime>
</Trailer>
</SaleEnvelope>

Ícone Página Principal   Voltar para Home da Amostra