Utilizando um Nó MQGet em um Fluxo de Pedido/resposta

Para obter detalhes do processamento concluído no nó MQGet obter o resultado acima, consulte Processamento de Mensagens do Nó MQGet. Para obter detalhes sobre como construir esse tipo de fluxo, consulte a amostra Amostra Coordinated Request Reply

Apresentação

Esta página é uma introdução à utilização de um nó MQGet em um fluxo de pedido/resposta e descreve como o nó processa as mensagens de entrada (de acordo com o Ambiente Local e parâmetros de entrada configurados) para construir as mensagens de saída.

Um fluxo pedido-resposta entre dois aplicativos permite que um dos aplicativos solicite mensagens do outro. Esse tipo de fluxo é ilustrado no diagrama a seguir:

A imagem é descrita no texto abaixo.

No diagrama, o Aplicativo Solicitante coloca uma mensagem na fila de entrada "Pedido" do Aplicativo de Resposta. O Aplicativo de Resposta processa a mensagem e envia uma resposta à fila de "Resposta" especificada na mensagem original do Aplicativo Solicitante.

Se um desses aplicativos precisar ser substituído ou aprimorado sem alterações do outro, então, as mensagens precisarão ser transformadas entre os dois aplicativos. Para tal, o Intermediário pode ser inserido entre eles, conforme mostrado no diagrama a seguir:

A imagem é descrita no texto abaixo.

Agora, um alias de fila, ou um dispositivo similar, é configurado de forma que o Aplicativo Solicitante coloque sua mensagem de pedido na fila de entrada do fluxo de mensagens do Intermediário "Resposta do Pedido Coordenada". No exemplo anterior, essa mensagem era colocada diretamente na fila de entrada do Aplicativo de Resposta. O fluxo "Resposta do Pedido Coordenada" transforma a mensagem em um formato adequado para o Aplicativo de Resposta e transfere a mesma para sua fila de entrada. Também salva os detalhes da fila de resposta do Aplicativo Solicitante original e restaura os mesmos para a mensagem de resposta recebida do Aplicativo de Resposta, de forma que possa ser postada novamente corretamente para o Aplicativo Solicitante.

Um nó MQGet pode ser colocado em qualquer local de um fluxo e recebe em seu terminal de entrada uma árvore de entrada propagada a partir do nó anterior. Em seguida, utiliza a mensagem recuperada da fila configurada do WebSphere MQ para construir uma árvore de resultados. Por fim, utiliza a árvore de entrada e a árvore de resultados para construir uma árvore de saída que é, então, propagada para seu terminal de saída, aviso ou falha, dependendo da configuração do nó e do resultado da operação Get.

Para obter detalhes adicionais sobre como construir um fluxo, consulte a amostra: Amostra Coordinated Request Reply .

Como o Ambiente Local É Utilizado

O LocalEnvironment propagado do nó anterior é lido e atualizado pelo nó MQGet.

  • A estrutura MQGMO será lida a partir de ${inputMQParmsLocation}.MQGMO.*
  • Os códigos de conclusão e razão do MQ serão colocados em ${outputMQParmsLocation}.CC e .RC
  • Se existir uma árvore MQGMO no ambiente local, ela será atualizada com os valores utilizados pelo nó e propagada no recebimento de dados
  • Se existir ${inputMQParmsLocation}.MQMD, o MQMD transmitido para a própria chamada de MQGET (contendo os valores especificados na mensagem de entrada ou gerada pelo nó) será colocado nesse local, excluindo tudo o que já estiver nesse local.

${inputMQParmsLocation} é o valor configurado na Propriedade do Nó MQGet Local dos Parâmetros MQ de Entrada na guia Propriedades do Pedido.

${outputMQParmsLocation} é o valor configurado na Propriedade do Nó MQGet Local dos Parâmetros MQ de Saída na guia Propriedades do Resultado.

Para obter detalhes sobre essas propriedades, consulte Nó MQGet.

Em resumo:
${inputMQParmsLocation}
  • QueueName: Substituição opcional para a Propriedade do Nó MQGet Nome da Fila.
  • InitialBufferSize: Substituição opcional para a Propriedade do Nó MQGet Tamanho Inicial do Buffer.
  • MQGMO.*: Opções opcionais da mensagem Get do MQ que o Nó MQGet utilizará.
${outputMQParmsLocation}
  • CC: Código de conclusão de chamada Get do MQ.
  • RC: Código de resultado de chamada Get do MQ.
  • MQGMO.*: Utilização de opções da mensagem Get do MQ se presente em ${inputMQParmsLocation}.
  • MQMD: Descritor de Mensagens do MQ para mensagens recebidas.

Como É Construído o MQMD para a Chamada de MQGet

  • Se você não fornecer um MQMD de entrada, então, um MQMD padrão, conforme descrito em WebSphere MQ Application Programming Reference, será utilizado.
  • Se for fornecido um MQMD de entrada, ele será utilizado de uma das duas formas a seguir:
    • Se o atributo Utilizar MQMD de Entrada Completo estiver configurado, o MQMD de entrada será totalmente utilizado.
    • Se o atributo Utilizar MQMD de Entrada Completo não estiver configurado, um MQMD padrão será preparado, em seguida, a partir do MQMD de entrada, se as caixas de opções messageID ou correlID estiverem configuradas, os IDs respectivos serão copiados para ele.

O diagrama a seguir mostra de forma um pouco mais detalhada como o nó MQGet constrói o MQMD a ser utilizado na chamada para o WebSphere MQ:

O diagrama é descrito no texto acima.

Como a Árvore de Mensagens de Saída É Construída

O diagrama a seguir esboça como a árvore de mensagens de saída é construída, combinando a árvore de entrada do nó anterior com a árvore de resultados da chamada de MQGet:

O diagrama é descrito no texto acima.

Segue um exemplo no qual as propriedades do Nó MQGet estão configuradas conforme a listagem:
copyMessage
copyEntireMessage
generateMode
mensagem
outputDataLocation
OutputRoot.XML.A
resultDataLocation
ResultRoot.XML.C
Neste exemplo, a Árvore de saída é construída de acordo com a seguinte seqüência:
  1. Toda a Árvore de entrada é copiada para a Árvore de saída, incluindo a ramificação XML com o filho A e o filho B de A.
  2. Na Árvore de resultados, o filho C e o filho D de C da ramificação XML são colocados na Árvore de saída na posição OutputRoot.XML.A. Qualquer conteúdo anterior de A (valores e filhos) é perdido e substituído pelo conteúdo de C, incluindo todos os valores e filhos que ele possui, neste caso, o filho D.
  3. A posição na Árvore de saída permanece denominada A.
O diagrama a seguir ilustra isto visualmente:

O diagrama é descrito no texto acima.

Exemplos de Árvores de Mensagens

A seguir estão alguns exemplos de como as árvores de mensagens são construídas, de acordo com as regras esboçadas acima.

Tabela 1. Um Input, LocalEnvironment e MQGet de Exemplo
Com uma montagem de mensagem semelhante a esta: A mensagem retornada por MQGet é:
InputRoot
MQMD
{mqmd da mensagem de entrada}
MQRFH2
{mqrfh2 da mensagem de entrada}
XMLNS
{corpo da mensagem de entrada}
InputLocalEnvironment
MQ
GET
MQGMO
MatchOptions = MQMO_MATCH_CORREL_ID
MQMD (sem filhos)
MyData
MQMD
{mqmd de entrada} (com CorrelID = {ID de Correlação correto como binário})
Início da mudança
ResultRoot
MQMD
{mqmd da mensagem de resultado}
MQRFH2
{mqrfh2 da mensagem de resultado}
XML
{corpo da mensagem de resultado}
Fim da mudança
Tabela 2. Árvores de mensagens de saída resultantes de exemplo de acordo com as configurações das propriedades do Nó MQGet detalhadas.
Com as seguintes configurações: A montagem de mensagem de saída resultante é:
inputMQMDLocation
InputLocalEnvironment.MyData.MQMD
copyMessage
copyEntireMessage
copyLocalEnv
copyEntireLocalEnvironment
generateMode
messageAndLocalEnvironment
outputDataLocation
InputLocalEnvironment.MyData.ReturnedMessage
OutputRoot
MQMD
{mqmd da mensagem de entrada}
MQRFH2
{mqrfh2 da mensagem de entrada}
XMLNS
{corpo da mensagem de entrada}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo utilizado para get}
MQMD
{mqmd utilizado para get}
CC = 0
RC = 0
MyData
MQMD
{mqmd de entrada} (com CorrelID = {ID de Correlação correto como binário})
ReturnedMessage
MQMD
{mqmd da mensagem de resultado}
MQRFH2
{mqrfh2 da mensagem de resultado}
XML
{corpo da mensagem de resultado}
resultDataLocation
ResultRoot.XML
OutputRoot
MQMD
{mqmd da mensagem de entrada}
MQRFH2
{mqrfh2 da mensagem de entrada}
XMLNS
{corpo da mensagem de entrada}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo utilizado para get}
MQMD
{mqmd utilizado para get}
CC = 0
RC = 0
MyData
MQMD
{mqmd de entrada} (com CorrelID = {ID de Correlação correto como binário})
ReturnedMessage (com atributos e valor de ResultRoot.XML)
{corpo da mensagem de resultado}

Esta árvore é efetivamente o resultado de uma designação de ${resultDataLocation} a ${outputDataLocation}. O valor do elemento de origem é copiado, pois são todos filhos, incluindo atributos.

copyLocalEnv
Nenhum
OutputRoot
MQMD
{mqmd da mensagem de entrada}
MQRFH2
{mqrfh2 da mensagem de entrada}
XMLNS
{corpo da mensagem de entrada}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo utilizado para get}
MQMD
{mqmd utilizado para get}
CC = 0
RC = 0
MyData
ReturnedMessage (com atributos e valor de ResultRoot.XML)
{corpo da mensagem de resultado}

Esta árvore tem o MQMD utilizado para get no OutputLocalEnvironment, porque o local de parâmetros de entrada do MQ continha um elemento MQMD. Mesmo que a árvore de entrada não seja copiada, a presença do elemento MQMD faz com que o MQMD utilizado para get ser colocado na árvore de saída.

outputDataLocation
<blank>
copyLocalEnv
copyEntireLocalEnvironment
OutputRoot
MQMD
{mqmd da mensagem de resultado}
MQRFH2
{mqrfh2 da mensagem de resultado}
XMLNS
{corpo da mensagem de resultado}
OutputLocalEnvironment
MQ
GET
MQGMO
{mqgmo utilizado para get}
MQMD
{mqmd utilizado para get}
CC = 0
RC = 0
MyData
MQMD
{mqmd de entrada} (com CorrelID = {ID de Correlação correto como binário})

A configuração de copyMessage neste caso não faz diferença para a eventual árvore de saída.

Conceitos relacionados
Visão Geral de Fluxos de Mensagens
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ac34680_