A amostra Roteamento de Mensagens mostra como é possível usar uma tabela ou arquivo de banco de dados para armazenar informações que um fluxo de mensagens pode usar para rotear mensagens para filas do WebSphere MQ. Essa abordagem é uma alternativa para a criação de informações de roteamento codificadas permanentemente em um nó Compute do fluxo de mensagens.
Usar uma tabela ou arquivo de banco de dados é uma maneira de armazenar qualquer forma de roteamento ou dados de transformação no WebSphere Message Broker. Eles oferecem as seguintes vantagens:
Um problema com o uso de bancos de dados ou arquivos para armazenar essas informações é o custo do desempenho incorrido quando se acessa o banco de dados ou arquivo cada vez que uma mensagem é passado por meio de um fluxo de mensagens.
Para resolver esse problema, variáveis compartilhadas podem ser usadas. Com variáveis compartilhadas, você pode armazenar estado nos fluxos de mensagens que estão disponíveis para todas as mensagens que estão usando o fluxo. Os detalhes exatos de como variáveis compartilhadas são utilizadas podem ser encontrados na instrução DECLARE na documentação do WebSphere Message Broker. Com o uso de variáveis compartilhadas, as informações dos arquivos ou tabelas de banco de dados podem ser armazenadas na memória em um fluxo de mensagens. Essa abordagem remove o requisito de acesso continuado ao arquivo ou tabela de banco de dados, além de fornecer quase todas as vantagens do uso de um arquivo ou tabela de banco de dados sem custos de desempenho. Entretanto, o cache não seleciona alterações para a tabela ou arquivo do banco de dados à medida que acontecem. Para selecionar as alterações, você deve reiniciar o fluxo de mensagens ou incluir um mecanismo de atualização para o fluxo de mensagens.
A amostra Message Routing mostra como você pode usar uma tabela ou arquivo de banco de dados para rotear mensagens em um fluxo de mensagens e como um fluxo de mensagens pode usar variáveis compartilhadas para armazenar a tabela ou arquivo de banco de dados. Também mostra como você pode atualizar a tabela de banco de dados em cache reiniciando o fluxo de mensagens ou enviando uma mensagem de atualização para o fluxo de mensagens.
Esse fluxo de mensagens simples lê uma mensagem de uma fila WebSphere MQ, cria uma lista de destino baseada em dados em uma tabela de banco de dados e, em seguida, envia a mensagem para as entradas na lista de destino.
Uma amostra exibindo como enviar uma mensagem usando uma versão armazenada em cache da tabela de banco de dados armazenada nas variáveis compartilhadas. O fluxo de mensagens tem dois subfluxos principais. O primeiro subfluxo fornece as mesmas funções como o fluxo de mensagens Routing_using_database_table, mas usando variáveis compartilhadas. O segundo subfluxo é utilizado para atualizar as variáveis de memória compartilhada.
Três cenários mostram como rotear mensagens usando o nó FileRead. O primeiro usa um arquivo no formato XML e o segundo e o terceiro no formato comma-separated value (CSV). Os formatos mostrados são exemplos. É possível usar qualquer formato de arquivo, se você estiver lendo no arquivo inteiro ou selecionando um registro único do arquivo.
Esse fluxo de mensagens lê uma mensagem a partir de uma fila do WebSphere MQ. O arquivo inteiro é lido, e uma lista de destino é criada com base no conteúdo do arquivo. Neste cenário, o arquivo está no formato XML. As mensagens são roteadas para as entradas na lista de destino.
O nó FileRead nessa amostra usa uma expressão XPath para localizar o registro correto no arquivo, com base em uma chave na mensagem recebida. O arquivo usado nesse cenário contém registros em um formato CSV. Um conjunto de mensagens é usado para criar um modelo de cada registro no arquivo. As informações de roteamento do registro são copiadas diretamente na lista de dados de destino, a ser usado diretamente pelo nó MQOutput. Como resultado, nenhum processamento adicional (por exemplo, por um nó Compute) é necessário.
Esse fluxo estende o fluxo anterior, mostrando como usar as variáveis compartilhadas ESQL para as informações de cache do arquivo. Um subfluxo adicional atualiza o cache da variável compartilhada.
Três expressões XPath podem ser configuradas na guia de resultados do nó FileRead:
Propriedade | Expressão | Explicação |
---|---|---|
Local de Dados de Resultado | $ResultRoot/MRM/data | A partir do registro selecionado, esse campo no registro é usado para enriquecer a mensagem. O conteúdo desse campo é copiado para o local de dados de saída. |
Local de Dados de Saída | $OutputLocalEnvironment/Destination/MQ | |
Expressão de seleção de registro | (concat( $InputRoot/XMLNSC/SaleEnvelope/SaleList/Invoice/Initial[1], $InputRoot/XMLNSC/SaleEnvelope/SaleList/Invoice/Initial[2] ) = $ResultRoot/MRM/Initial ) AND ($InputRoot/XMLNSC/SaleEnvelope/SaleList/Invoice/Surname = $ResultRoot/MRM/Surname) |
A primeira parte da expressão concatena as duas iniciais na mensagem. A segunda parte da expressão usa a parte do sobrenome da mensagem. O registro que corresponde às iniciais e ao sobrenome é propagado. |
A mensagem de teste que é usada para conduzir a amostra Roteamento de Mensagem é uma mensagem XML que contém detalhes de fatura para um cliente.
<SaleEnvelope> <Header> <SaleListCount>1</SaleListCount> </Header> <SaleList> <Invoice> <Initial>T</Initial> <Initial>D</Initial> <Surname>Montana</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> </SaleList> <Trailer> <CompletionTime>12.00.00</CompletionTime> </Trailer> </SaleEnvelope>
Os campos Inicial e Sobrenome são usados para executar a consulta para localizar a fila de destino para cada cliente.
Os fluxos de mensagens de amostra usam a mesma tabela de banco de dados da qual obter as informações de roteamento. A tabela de banco de dados contém cinco colunas: as três primeiras contêm informações de consulta que são derivadas da mensagem que chega e as duas últimas colunas contêm os detalhes da fila e do gerenciador de filas para os quais a mensagem é roteada. As colunas são mostradas na tabela a seguir:
Coluna | Descrição |
---|---|
Variable1 | A primeira variável é usada na procura de fila de destino (essa variável é codificada permanentemente na amostra e não é derivada da mensagem XML). |
Variable2 | A segunda variável que é usada na procura de fila de destino (essa variável é derivada da mensagem XML usando o campo Inicial). |
Variable3 | A terceira variável usada na consulta da fila de destino (esta variável é derivada da mensagem XML usando o campo Sobrenome). |
Queue_manager | O nome do gerenciador de filas de destino. |
Queue_name | O nome da fila de destino. |
A definição para a tabela de banco de dados é fornecida no projeto do fluxo de mensagens de amostra no diretório Database. A tabela de banco de dados não está diretamente vinculada à mensagem XML que chega, sendo assim, é possível reutilizar essa tabela para mensagens de roteamento diferentes. Se a tabela de banco de dados foi vinculada diretamente à mensagem XML recebida, a primeira variável pode ser usada para diferenciar os nós que são usados na mesma tabela.
Cada um dos nós Compute dos fluxos de mensagens contém comentários ESQL detalhados explicando exatamente o que foi feito para atingir o comportamento necessário:
Como você visualiza o conteúdo do banco de dados para a amostra depende de qual produto de banco de dados está instalado. Para bancos de dados DB2, utilize as ferramentas fornecidas pelo DB2; por exemplo o DB2 Control Center.
Dois arquivos XML são usados nesse fluxo de mensagens. Ambos possuem a mesma estrutura, mas um contém vários destinos para a mensagem. O arquivo XML possui dois elementos:
Esses fluxos de mensagens usam um arquivo CSV. O arquivo contém vários registros, cada qual possuindo quatro elementos:
Cada um dos nós Compute dos fluxos de mensagens contém comentários ESQL detalhados explicando exatamente o que foi feito para atingir o comportamento necessário:
A imagem abaixo mostra o conjunto de mensagens usado para os fluxos de mensagens Routing_using_records_file e Routing_using_file_memory_cache.
A partir do conjunto de mensagens, é possível ver cada um dos campos mostrados no arquivo CSV. O elemento DestinationData é repetido uma vez para cada fila de destino para a qual a mensagem será enviada.