Correlacionando Mensagens de Agregação de Pedido de Entrada e de Resposta de Saída

Se estiver utilizando o como o protocolo de transporte para os fluxos de agregação, você poderá correlacionar a mensagem do pedido inicial com a mensagem de resposta combinada, preservando MsgId da entrada MQMD e utilizando-o como CorrelId da resposta de saída.

Antes de começar:

Para concluir esta tarefa, você deve ter concluído as tarefas a seguir:

Quando o pedido inicial é processado pelo fluxo de difusão, o MsgId retido no MQMD é perdido. Se você deseja correlacionar a mensagem de saída agregada na mensagem de entrada original, uma forma de se fazer isso é preservar MsgId e especificá-lo como CorrelId na mensagem de saída agregada.

A tarefa descrita aqui assume que você já tenha criado um fluxo de difusão e um fluxo de recepção como dois fluxos separados que são executados no mesmo intermediário. Também assume o conteúdo mínimo para esses fluxos; seus fluxos podem incluir o conteúdo que for apropriado e você pode adaptá-los da maneira mostrada aqui para incluir essa função adicional.

  1. Alterne para o .
  2. Abra o fluxo de difusão e inclua uma nova ramificação que inclua esses nós:
    • Um nó Compute denominado SaveMsgId, conectado ao terminal de saída do nó AggregateControl
    • Um nó MQOutput denominado SavedMsgIdQ, conectado ao terminal de saída do SaveMsgId
    • Um nó AggregateRequest, conectado ao terminal de saída do SavedMsgIdQ
    Um fluxo de difusão atualizado é mostrado abaixo. Agora ele possui três ramificações do nó AggregateControl:
    1. A nova ramificação com o nó Compute SaveMsgID que inclui um MQMD em uma cópia da mensagem de entrada e preserva o MsgId.
    2. A ramificação original que processa o pedido. Isso é mostrado com um único nó Compute HandleRequest que extrai um único pedido da entrada combinada, inclui um MQMD, e emite o novo pedido no nó MQOutput RequestQ. Isso é seguido por um nó AggregateRequest que registra que esse pedido foi emitido.
    3. A ramificação de controle, em que um nó Compute Add_MQMD inclui um MQMD na mensagem de controle e o transmite ao nó MQOutput ControlQ para entregar o nó AggregateReply em um fluxo de recepção separado.

    Isso mostra um fluxo de difusão mínimo (nó MQInput conectado ao nó AggregateControl, conectado ao fluxo de controle (Compute que inclui um MQMD conectado ao MQOutput), fluxo normal (Compute conectado ao MQOutput conectado a AggregateRequest). Também possui um fluxo adicional para preservar o MsgId (Compute conectado ao MQOutput conectado ao AggregateRequest).
  3. Codifique o ESQL para o novo nó Compute SaveMsgId, conforme mostrado abaixo:
    CREATE COMPUTE MODULE SaveMsgId
      CREATE FUNCTION Main() RETURNS BOOLEAN
        BEGIN
        CALL CopyMessageHeaders();
    
    // Extrair e preservar o MsgId da mensagem de pedido original
        SET OutputRoot.XML.MyMsgId = InputRoot.MQMD.MsgId;
            END;
      CREATE PROCEDURE CopyMessageHeaders()
        BEGIN
                                 DECLARE I INTEGER 1;
        DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
                                 WHILE I < J DO
          SET OutputRoot.*[I] = InputRoot.*[I];
                  SET I = I + 1;    END WHILE;
            END;
    END MODULE;
  4. Configure o nó MQOutput SavedMsgIdQ:
    • Defina a propriedade Nome da Fila como SAVEDMSGID.
    • Selecione o Pedido no navegador do diálogo de propriedades e selecione a caixa de opções Pedido.
    • Digite o nome REPLIES para a propriedade Fila Responder-Para. Esse é o nome da fila para a qual as mensagens de resposta são enviadas para os pedidos enviados pelo fluxo de difusão.
  5. Configure o nó AggregateRequest na nova ramificação, definindo a propriedade Pasta para SavedMSGID
  6. Crie um novo fluxo de mensagens contendo:
    • Um nó MQInput SavedMsgId, com a propriedade Nome da Fila definida como SAVEDMSGID
    • Um nó MQReply, conectado ao terminal de saída do SavedMsgId
    Isso é mostrado abaixo:
    Isso mostra o novo fluxo que recebe a mensagem que contém o MQMD MsgId e a roteia para a fila de entrada REPLIES do fluxo de recepção através de um nó MQReply
  7. Abra o fluxo de recepção e atualize seu nó Compute para manipular a nova função. Inclua o ESQL mostrado abaixo na função Main:
    SET OutputRoot.MQMD.Version = MQMD_CURRENT_VERSION;
    // Armazene o valor MQMD MsgId salvo da pasta especificada no campo
    MQMD CorrelId
        SET OutputRoot.MQMD.CorrelId =
            
    CAST(InputRoot.ComIbmAggregateReplyBody.SavedMSGID.XML.MyMsgId AS
    BLOB);  
    O fluxo de difusão de exemplo é mostrado abaixo; o nó Compute SetCorrelID processa as respostas para criar uma mensagem de resposta combinada e agora define o identificador de correlação MQMD para associar sua resposta ao pedido inicial:
    Isso mostra um fluxo de recepção mínimo (nó MQInput que recebe a mensagem de controle conectada ao terminal de controle do nó AggregateReply, o nó MQInput que recebe as respostas conectadas ao AggregateReply no terminal. O terminal de saída do nó AggregateReply conectado ao nó Compute SetCorrelId conectado ao MQOutput que entrega a resposta combinada).
Essa tarefa mostra um exemplo de como preservar o MQMD MsgId para correlacionar o pedido inicial à resposta final. A função adicional foi incluída em uma nova ramificação de um fluxo de difusão existente; isso inclui outra mensagem no pedido e outro fluxo de mensagens no intermediário. Você poderia alcançar o mesmo resultado, se incluísse o código para preservar o MsgId para uma ramificação existente no seu fluxo de difusão.

Conceitos relacionados
Fluxos de Mensagem
Agregação de Fluxo de Mensagens

Tarefas relacionadas
Configurando Fluxos de Agregação
Projetando um Fluxo de Mensagens
Criação de um Fluxo de Mensagens
Definindo o Conteúdo do Fluxo de Mensagens

Referências relacionadas
Nó AggregateControl
Nó AggregateReply
Nó AggregateRequest