Como a Árvore de Mensagem É Ocupada

A árvore de mensagens é inicialmente ocupada pelo nó input do fluxo de mensagens.

Quando o nó input recebe a mensagem de entrada, ele cria a árvore Propriedades (a primeira subárvore da árvore de mensagens) e ocupa-a com as propriedades do nó configuradas no fluxo de mensagens. Em seguida, ele examina o conteúdo do fluxo de bits da mensagem de entrada e cria o restante da árvore de mensagens para refletir esse conteúdo. Esse processo depende, até certo ponto, do próprio nó input, que é controlado pelo transporte através do qual a mensagem é recebida:

Protocolos WebSphere MQ Enterprise Transport, e WebSphere MQ Telemetry Transport
Se seu aplicativo se comunicar com o intermediário por meio desses protocolos e se o fluxo de mensagens incluir o nó MQInput, ou SCADAInput correspondente, todas as mensagens recebidas deverão iniciar com um cabeçalho MQMD (Message Queue Message Descriptor). Se um MQMD válido não estiver presente no início da mensagem, a mensagem será rejeitada e não ocorrerá nenhum processamento adicional.

O nó input primeiro chama o analisador MQMD e cria a subárvore para esse cabeçalho.

Uma mensagem pode ter zero ou mais cabeçalhos adicionais após o MQMD e eles estão encadeados, com o campo Formato de um cabeçalho definindo o formato do cabeçalho a seguir, até e incluindo o último cabeçalho que define o formato do corpo da mensagem. Se houver um cabeçalho MQRFH e um MQRFH2 na cadeia, os dados de nome/valor em qualquer um desses dois cabeçalhos também poderão conter informações sobre o formato dos dados a seguir. Se o valor especificado em Formato for um analisador reconhecido, ele sempre terá precedência sobre os dados de nome/valor.

O intermediário chama o analisador apropriado para interpretar cada cabeçalho, após a cadeia na mensagem. Cada cabeçalho é analisado de forma independente. Os campos em um único cabeçalho são analisados em uma ordem, que é controlada pelo analisador. Não é possível prever ou depender da ordem escolhida, mas a ordem em que os campos são analisados não afeta a ordem em que os campos aparecem no cabeçalho.

O intermediário assegura que a integridade dos cabeçalhos que precedem uma corpo de mensagem seja mantida. O formato de cada parte da mensagem é definido pelo campo Formato no cabeçalho imediatamente precedente (se a seguinte parte tiver um formato reconhecido do WebSphere MQ) ou pelos valores definidos no cabeçalho MQRFH ou MQRFH2:

  • O formato do primeiro cabeçalho é conhecido, porque deve ser MQMD.
  • O formato de qualquer cabeçalho subseqüente na mensagem é definido no campo Formato no cabeçalho precedente.
  • O formato do corpo corresponde ao domínio de mensagem e ao analisador que deve ser chamado para o corpo da mensagem (por exemplo, XML). Essas informações são definidas no cabeçalho MQRFH ou MQRFH2, ou na propriedade do domínio de mensagem do nó input que recebe a mensagem.

Esse processo é repetido quantas vezes forem necessárias pelo número de cabeçalhos que precedem o corpo da mensagem. Não é necessário ocupar esses campos; o intermediário trata essa seqüência para você.

O intermediário conclui este processo para assegurar que os campos Formato nos cabeçalhos identifiquem corretamente cada parte da mensagem. Se ele não fizer isso, o WebSphere MQ talvez não possa entregar a mensagem. Como o analisador do corpo da mensagem não possui um formato de cabeçalho do WebSphere MQ reconhecido, o intermediário substitui este valor no campo Formato do último cabeçalho pelo valor MQFMT_NONE. O valor original nesse campo é armazenado no campo Domínio no cabeçalho MQRFH ou MQRFH2 para manter as informações sobre o conteúdo do corpo da mensagem. Se não houver nenhum MQRFH ou MQRFH2, as informações serão armazenadas na árvore Propriedades.

Por exemplo, se o cabeçalho MQRFH2 preceder imediatamente o corpo da mensagem e seu campo Formato estiver definido como XML, indicando que o corpo da mensagem deve ser analisado pelo analisador XML genérico, o campo Domínio do MQRFH2 será definido como XML, e seu campo Formato redefinido como MQFMT_NONE.

Estas ações podem resultar em informações armazenadas explicitamente por uma expressão ESQL sendo substituída pelo intermediário.

Após a análise de todos os cabeçalhos e a criação das subárvores correspondentes, o nó input associará o analisador especificado ao corpo da mensagem. Você deve especificar o analisador que deve ser associado ao conteúdo do corpo da mensagem. Você pode fazer isso em um cabeçalho de mensagem; por exemplo, a pasta <mcd> no cabeçalho MQRFH2 (geralmente recomendada) ou nas propriedades do nó input (recomendável se a mensagem não incluir cabeçalhos). O nó input faz a associação como descrito abaixo:

  • Se a mensagem tiver um cabeçalho MQRFH ou MQRFH2, o domínio identificado no cabeçalho (em Formato ou nos dados de nome/valor) determinará o analisador que está associado a essa mensagem.

    O nó SCADAInput cria mensagens de formato do WebSphere MQ com cabeçalhos MQRFH2 a partir das mensagens de entrada que o listener recebe na porta TCP/IP.

  • Se a mensagem não tiver um cabeçalho MQRFH ou MQRFH2 ou se o cabeçalho não identificar o domínio, mas as propriedades do nó input, armazenadas na árvore Propriedades, indicarem o domínio da mensagem, será utilizado o analisador especificado pela propriedade do nó input. Você pode especificar um analisador definido pelo usuário.
  • Se o domínio da mensagem não puder ser identificado pelos valores do cabeçalho ou pelas propriedades do nó input, a mensagem será tratada como um objeto binário (BLOB). O analisador BLOB está associado à mensagem. Um BLOB pode ser interpretado como uma cadeia de caracteres hexadecimais, e conseqüentemente pode ser modificado ou examinado no fluxo de mensagens, especificando a localização do subconjunto da cadeia.

O corpo da mensagem não será analisado por razões de desempenho; é possível que a configuração do fluxo de mensagens não precise do corpo da mensagem que será analisado. O corpo é analisado apenas quando uma referência é feita para seu conteúdo durante o fluxo da mensagem.

Por exemplo, o corpo da mensagem será analisado quando você referir-se a Root.XML.Field (ou InputRoot.XML.Field no nó Compute) ou Root.MRM.Field.Dependendo dos caminhos utilizados no fluxo de mensagens, essa análise pode ocorrer em diferentes pontos. Esta análise, quando a primeira abordagem necessária for referida também como análise parcial e em processamento normal, não afeta a lógica de um fluxo de mensagens. No entanto, há algumas implicações para cenários de manipulação de erros, conforme descrito em Tratando Erros em Fluxos de Mensagens.

Se desejar que um fluxo de mensagens aceite mensagens de mais de um domínio da mensagem, será possível incluir um cabeçalho MQRFH2 em sua mensagem, a partir do qual o nó input extrairá o domínio da mensagem e informações de definição de mensagem relacionadas (conjunto, tipo e formato).

Se você configurar os cabeçalhos da mensagem ou as propriedades do nó input para identificar um analisador definido pelo usuário, a forma pela qual ele interpreta a mensagem e constrói a árvore lógica pode ser diferente da descrita aqui.

Protocolos WebSphere MQ Multicast Transport, WebSphere MQ Real-time Transport e WebSphere MQ Web Services Transport
Se seu aplicativo estiver se comunicando com o intermediário através destes protocolos suportados e seu fluxo de mensagens incluir o nó Real-timeInput, HTTPInput ou HTTPRequest correspondente, as mensagens recebidas não precisarão ser incluídas em um cabeçalho específico. Seus aplicativos podem incluir o cabeçalho MQRFH2 para fornecer informações relacionadas à mensagem, por exemplo, sobre publicações e assinaturas. Se forem incluídos cabeçalhos reconhecidos, o nó input chamará os analisadores apropriados para interpretar os cabeçalhos e para construir as partes relevantes da árvore de mensagens, conforme descrito para os outros protocolos suportados.

Se não houver cabeçalhos ou se estes cabeçalhos não especificarem o analisador para o corpo da mensagem, será necessário definir as propriedades do nó input para definir o analisador do corpo da mensagem. Se isso não for feito, a mensagem será tratada como um BLOB. Você pode especificar um analisador definido pelo usuário.

O analisador especificado é associado ao corpo de mensagem pelo nó input (do mesmo modo que é associado aos protocolos WebSphere MQ Enterprise Transport, WebSphere MQ Mobile Transport, e WebSphere MQ Telemetry Transport) e o corpo da mensagem não é analisado.

Se você configurar os cabeçalhos da mensagem ou as propriedades do nó input para identificar um analisador definido pelo usuário, a forma pela qual ele interpreta a mensagem e constrói a árvore lógica pode ser diferente da descrita aqui.

Todos os Outros Protocolos
Se desejar que seu fluxo de mensagens aceite mensagens de um protocolo de transporte para o qual o WebSphere Message Broker não fornece suporte interno ou se desejar que ele forneça algum processamento específico durante o recebimento de uma mensagem, poderá utilizar a interface de programação em linguagem Java ou C para criar um novo nó input definido pelo usuário.

Essa interface não gera automaticamente uma subárvore Propriedades para uma mensagem (essa subárvore é discutida em Estrutura em Árvore de Mensagens). Não é requerido que uma mensagem tenha umasubárvore Propriedades, embora você possa achar útil criar uma e fornecer uma estrutura de árvore de mensagens consistente, independente do nó input. Se desejar que uma subárvore Properties seja criada na árvore de mensagens e estiver utilizando um nó input definido pelo usuário, você mesmo deverá fazer isso.

Se precisar processar mensagens que não estão de acordo com nenhum dos domínios de mensagens definidos, será possível utilizar a interface de programação em linguagem C para criar um novo analisador definido pelo usuário.

Você deve consultar a interface do nó para entender como ele utiliza analisadores e se é possível configurá-lo para modificar seu comportamento. Se o nó utilizar um analisador definido pelo usuário, a estrutura da árvore criada para a mensagem pode ser um pouco diferente da criada para analisadores internos. Um nó input definido pelo usuário pode analisar totalmente uma mensagem de entrada ou pode participar da análise parcial na qual o corpo da mensagem é analisado apenas quando necessário.

Você também pode criar seus próprios nós de saída e de processamento de mensagens em C ou Java.

Conceitos relacionados
Estrutura de Árvore Lógica
Estrutura em Árvore de Mensagens
Estrutura em Árvore Environment
Estrutura em Árvore LocalEnvironment
Estrutura em Árvore ExceptionList
Análise Parcial
Nomes de Correlação
Tarefas relacionadas
Tratando Erros em Fluxos de Mensagens
Desenvolvendo Fluxos de Mensagens
Referências relacionadas
Nós Internos
Nós Definidos pelos Usuários
Cabeçalho do MQRFH2
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ac18520_