Detalhes sobre o subfluxo de Rota para o padrão de Record Distribution para WebSphere MQ: Unidirecional.
O comportamento do subfluxo de Rota depende do valor do parâmetro do padrão de Roteamento:
Se Sem roteamento for selecionado, um único nó MQOutput será criado e configurado com os valores dos parâmetros padrão Gerenciador de filas de saída e Fila de saída. O fluxo de roteamento é um subfluxo que inclui um nó de Passagem. Ambos os terminais, padrão e de rota, são incluídos para que este subfluxo esteja consistente com todos os outros tipos de subfluxo de roteamento, mas apenas o terminal de rota única é usado.
Um grupo de quatro parâmetros que definem uma rota:
Para cada rota que é definida, um terminal de Saída para o subfluxo de Rota e um nó MQOutput são criados e conectados.
O subfluxo de Rota contém um nó de Rota que é configurado com um filtro que roteia para o primeiro terminal de Saída para o qual a condição KeyLocation = Key Value é preenchida. Se um elemento de mensagem não corresponder a nenhuma das rotas, esta situação será registrada em uma variável na árvore de ambiente do broker e a mensagem será transmitida ao terminal Padrão.
Se a expressão XPATH que define um Local de chave incluir um qualificador de espaço de nomes, a tag que define o espaço de nomes deverá ser incluída na tabela Espaço de Nomes.
Talvez você veja um aviso no nó de Rota que seja semelhante à mensagem a seguir: Tabela de filtro: Padrão de filtro: O elemento de esquema element_name não foi localizado no XPath Key location = Key value. Este aviso não causa qualquer problema quando você implementa e executa sua instância padrão.
É possível especificar várias rotas diferentes selecionando Especificar rotas.
Se este valor for selecionado, as rotas serão determinadas usando valores dos dados da mensagem para consultar o gerenciador de filas e a fila a partir de uma tabela de roteamento de banco de dados. A tabela de roteamento não é acessada diretamente, mas é lida e armazenada em cache na memória para maior eficiência.
Se este valor for selecionado, um único terminal de Saída será criado para o subfluxo de Rota. O terminal de Saída está conectado a um único nó MQOutput que está configurado para obter uma lista de destinos que foram colocados na árvore de ambiente do broker pela consulta.
O subfluxo de Rota verifica se o cache requer atualização, verificando se o valor da variável de linha compartilhada por CacheQueueTable.valid está configurada como NULL. A variável será configurada como NULL quando o fluxo iniciar e quando Atualização de Cache for ativado e uma mensagem de atualização tiver sido enviada à Fila de Atualização. As mensagens de atualização configuram o valor como NULL.
Se o cache requerer atualização, a tabela ROUTING_TABLE da origem de dados, que é especificada no parâmetro padrão Origem de dados de roteamento, será procurada para localizar todas as linhas que correspondem ao contexto de roteamento para este fluxo. O contexto de roteamento é definido pelo parâmetro padrão Contexto de dados de roteamento e as linhas nas quais o campo ROUTING_CONTEXT corresponde a este parâmetro são lidas em um cache na memória, o que é feito atomicamente para evitar consultas enquanto o cache está em um estado inconsistente.
A estrutura dos dados em cache é:
VARIABLE1, VARIABLE2, QUEUE_MANAGER, QUEUE_NAME
A consulta é executada extraindo um, ou dois, valores de chave do elemento de mensagem usando expressões ESQL que são definidas como parâmetros padrão. A consulta é definida usando uma instrução no seguinte formato:
SET KEY = <pattern parameter>
Se uma única chave for especificada para selecionar uma linha, ou linhas, dos dados de roteamento, use a seguinte cláusula WHERE para seleção:
WHERE S.VARIABLE1 = KEY1
Se uma segunda chave for especificada, use a seguinte cláusula WHERE para seleção:
WHERE S.VARIABLE1 = KEY1 and S.VARIABLE2 = KEY2
Esta seleção configura o gerenciador de filas e a lista na lista de destinos que é usada pelo nó MQOutput. Múltiplas linhas podem ser retornadas e os dados de destino incluem todos os destinos selecionados. Se uma correspondência não for localizada, um erro de roteamento ocorrerá e a mensagem será transmitida ao terminal de Falha do subfluxo de Rota.