A amostra Roteamento de Mensagens mostra como uma tabela de banco de dados pode ser utilizada para armazenar as informações de roteamento que um fluxo de mensagens pode utilizar para rotear mensagens para filas do WebSphere MQ. Essa é uma abordagem alternativa para criar informações de roteamento com hardcode atribuído em um nó Compute do fluxo de mensagens.
O uso de uma tabela de banco de dados é a forma recomendada no WebSphere Message Broker para armazenar qualquer forma de dados de roteamento ou transformação pelas seguintes razões:
O único problema com a utilização de bancos de dados para armazenar essas informações é o código extra de desempenho necessário para acessar o banco de dados cada vez que uma mensagem passa por um fluxo de mensagens.
Antes da versão 6.0 do WebSphere Message Broker, uma decisão de design precisou ser feita entre utilizar hardcode atribuído nas informações de roteamento ou mapeamento no ESQL ou utilizar uma tabela de banco de dados para armazenar as informações. A decisão freqüentemente se baseava se o custo de desempenho de uso do banco de dados era aceitável. Para taxas de mensagens altas, freqüentemente decidia-se criar informações com hardcode atribuído, o que seria mais fácil manter em uma tabela de banco de dados.
Na versão 6.0, o conceito de variáveis compartilhadas foi introduzido. Com variáveis compartilhadas, você pode armazenar estado nos fluxos de mensagens que estão disponíveis em todas as mensagens que utilizam o fluxo. Os detalhes exatos de como as variáveis compartilhadas são utilizadas podem ser localizados em Variáveis DECLARE. Com as variáveis compartilhadas, as tabelas de banco de dados podem ser armazenadas na memória em um fluxo de mensagens. Isso remove a necessidade de acesso contínuo à tabela de banco de dados e fornece quase todas as vantagens de utilizar uma tabela de banco de dados sem o código extra de desempenho. Apenas uma vantagem está ausente: o cache não selecionará alterações na tabela de banco de dados conforme elas acontecerem. Para selecionar alterações, você precisa reiniciar o fluxo de mensagens ou incluir um mecanismo de atualização no fluxo de mensagens.
A amostra Roteamento de Mensagens mostra como utilizar uma tabela de banco de dados para rotear mensagens em um fluxo de mensagens e como um fluxo de mensagens pode utilizar variáveis compartilhadas para armazenar a tabela de banco de dados. Ela também mostra como a tabela de banco de dados armazenada em cache pode ser atualizada reiniciando o fluxo de mensagens ou enviando uma mensagem de atualização para o fluxo de mensagens.
A amostra Roteamento de Mensagens contém dois fluxos de mensagens:
Uma amostra de como rotear uma mensagem utilizando uma tabela de banco de dados. Esse fluxo de mensagens simples lê uma mensagem de uma fila do WebSphere MQSeries, cria uma lista de destinos baseada em dados em uma tabela de banco de dados e, em seguida, roteia a mensagem para as entradas na lista de destinos.
Uma amostra de como rotear uma mensagem utilizando uma versão armazenada em cache da tabela de banco de dados armazenada em variáveis compartilhadas. O fluxo de mensagens tem dois subfluxos principais. O primeiro subfluxo fornece a mesma funcionalidade do fluxo de mensagens Routing_using_database_table, mas utilizando variáveis compartilhadas. O segundo subfluxo é utilizado para atualizar as variáveis de memória compartilhada.
A mensagem de teste utilizada para conduzir a amostra Roteamento de Mensagens é uma mensagem XML direta 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 utilizados para fazer a consulta no banco de dados para localizar a fila de destino para cada cliente.
Os fluxos de mensagens de amostra utilizam a mesma tabela de banco de dados para 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:
Coluna | Descrição |
Variable1 | A primeira variável utilizada na consulta da fila de destino (Ela contém hardcode atribuído na amostra e não é derivada da mensagem XML) |
Variable2 | A segunda variável utilizada na consulta da fila de destino (Ela é derivada da mensagem XML utilizando o campo <Inicial>) |
Variable3 | A terceira variável utilizada na consulta da fila de destino (Ela é derivada da mensagem XML utilizando 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, portanto, seria possível reutilizar essa tabela para várias mensagens de roteamento diferentes. Se foi esse o caso, a primeira variável poderia ser utilizada para diferenciar entre nós diferentes que utilizam a 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 requerido:
O modo como você visualiza o conteúdo do banco de dados da amostra depende de qual produto do banco de dados está instalado. Para bancos de dados DB2, utilize as ferramentas fornecidas pelo DB2; por exemplo o DB2 Control Center. Se você não tiver instalado um produto do banco de dados, a amostra utilizará o banco de dados Apache Derby. Para obter instruções sobre como visualizar os dados em um banco de dados Derby, consulte Visualizando o Conteúdo de um Banco de Dados Derby.