Transmitir carga útil da mensagem por referência: Benefícios em potencial para cada etapa de processo

Para cada etapa de processamento assumida pelo seu aplicativo de sistema de mensagens JMS, verifique esta tabela para ver quando e porque há um potencial benefício de desempenho na ativação das propriedades "passar carga útil da mensagem por referência" na connection factory ou especificação de ativação associada.

Quando grandes mensagens de objetos ou mensagens de bytes são enviadas, o custo no uso da memória e do processador de serialização, desserialização e cópia da carga útil da mensagem pode ser expressivo. Se você ativar as propriedades transmitir carga útil de mensagem por referência em um connection factory ou uma especificação de ativação, informará ao provedor do sistema de mensagens padrão para substituir a especificação do JMS 1.1 e reduzir ou ignorar potencialmente essa cópia de dados.

CUIDADO:
As partes da Especificação JMS ignoradas por essas propriedades são definidas para garantir a integridade dos dados da mensagem. Todos os aplicativos JMS que usam essas propriedades devem seguir estritamente as regras descritas no tópico Por que e Quando Passar a Carga Útil da Mensagem JMS por Referência, ou haverá o risco de perda da integridade de dados.
Para transmitir a carga útil da mensagem por referência, você configura as seguintes propriedades nos connection factories e nas especificações de ativação:
producerDoesNotModifyPayloadAfterSet (para connection factories) ou forwarderDoesNotModifyPayloadAfterSet (para especificações de ativação)
Quando essa propriedade estiver ativada, as mensagens de objeto ou de bytes produzidas pelo connection factory ou redirecionadas por meio da especificação de ativação não são copiadas quando configuradas na mensagem e são serializadas apenas quando absolutamente necessário. Os aplicativos que enviam tais mensagens não devem modificar os dados, uma vez que foram configurados na mensagem.
consumerDoesNotModifyPayloadAfterGet
Quando essa propriedade estiver ativada, as mensagens de objeto recebidas por meio do connection factory ou da especificação de ativação são serializadas apenas quando absolutamente necessário. Os dados obtidos a partir dessas mensagens não devem ser modificados pelos aplicativos.
Tabela 1. Potenciais Benefícios de Desempenho para Cada Etapa de Processamento Assumida pelo Seu Aplicativo Produtor, Consumidor ou Encaminhador. A primeira coluna da tabela lista as etapas de processamento para os objetos e mensagens de bytes. A segunda coluna indica se há uma possibilidade para melhoria do desempenho. A terceira coluna fornece uma breve explicação sobre os processos e as propriedades.
Etapa de Processamento Há potencial para melhoria do desempenho? Explicação
Mensagens de objetos com aplicativos produtores e consumidores    
Uma mensagem de objeto é enviada para um aplicativo consumidor na mesma JVM. As propriedades producerDoesNotModifyPayloadAfterSet e consumerDoesNotModifyPayloadAfterGet são ambas ativadas. Yes Sob determinadas condições, o objeto de carga útil é passado por referência para o aplicativo consumidor.

Se a mensagem não for persistente ou transacionada, e o aplicativo consumidor estiver imediatamente disponível, o objeto de carga útil talvez nunca seja serializado.

Uma mensagem de objeto é produzida com a propriedade producerDoesNotModifyPayloadAfterSet ativada e, em seguida, recebida por um aplicativo consumidor para o qual a propriedade consumerDoesNotModifyPayloadAfterGet não está ativada. Não Nenhum benefício é obtido porque o aplicativo consumidor não possui a propriedade consumerDoesNotModifyPayloadAfterGet ativada.
Uma mensagem de objeto é enviada para um único aplicativo consumidor em uma JVM diferente. As propriedades producerDoesNotModifyPayloadAfterSet e consumerDoesNotModifyPayloadAfterGet são ambas ativadas. Não Nenhum benefício é obtido porque o único aplicativo consumidor está em uma outra JVM.
Uma mensagem de objeto é recebida por vários aplicativos consumidores (um tópico) que possuem a propriedade consumerDoesNotModifyPayloadAfterGet ativada e estão todos em execução na mesma JVM. Yes Todos os aplicativos consumidores com a propriedade consumerDoesNotModifyPayloadAfterGet ativada podem receber uma referência para o mesmo objeto, embora isso não seja garantido.
Mensagens de objetos com aplicativos encaminhadores    
Uma mensagem de objeto é encaminhada e o aplicativo encaminhador acessa a carga útil da mensagem. As propriedades consumerDoesNotModifyPayloadAfterGet e producer/forwarderDoesNotModifyPayloadAfterSet são ativadas. Yes Há um potencial benefício de desempenho nos seguintes casos:
  • O produtor da mensagem encaminhada possui a propriedade producerDoesNotModifyPayloadAfterSet ativada e está na mesma JVM que o aplicativo encaminhador.
  • O consumidor da mensagem encaminhada possui a propriedade consumerDoesNotModifyPayloadAfterGet ativada e está na mesma JVM que o aplicativo encaminhador.
Uma mensagem de objeto é encaminhada e o aplicativo encaminhador acessa a carga útil da mensagem. Apenas a propriedade producer/forwarderDoesNotModifyPayloadAfterSet está ativada. Yes Há um potencial benefício de desempenho se o consumidor da mensagem encaminhada tiver a propriedade consumerDoesNotModifyPayloadAfterGet ativada e estiver na mesma JVM que o aplicativo encaminhador.
Uma mensagem de objeto é encaminhada e o aplicativo encaminhador não acessa a cada útil da mensagem. Não Se a carga útil da mensagem de objeto não for acessada pelo aplicativo encaminhador, então as propriedades producer/forwarderDoesNotModifyPayloadAfterSet e consumerDoesNotModifyPayloadAfterGet não têm nenhum efeito para o aplicativo encaminhador. Os benefícios obtidos a partir do aplicativo produtor original e o aplicativo consumidor final são mantidos.
Mensagens de objeto com mediações    
Uma mensagem de objeto é enviada para um destino do barramento de integração de serviços mediado. Não Se a mensagem de objeto for enviada para um destino mediado, então nenhum benefício de desempenho será obtido ao ativar a propriedade producerDoesNotModifyPayloadAfterSet.
Mensagens de bytes com aplicativos consumidores    
Uma mensagem de bytes é enviada para qualquer aplicativo consumidor. A propriedade producerDoesNotModifyPayloadAfterSet está ativada. Yes A parte da especificação JMS que ordena a cópia dos dados na configuração para a mensagem é ignorada, salvando uma cópia dos dados de bytes.
Uma mensagem de bytes é recebida com a propriedade consumerDoesNotModifyPayloadAfterGet ativada. Não A API JMS não permite que dados de bytes sejam passados por referência de volta ao código do consumidor (métodos BytesMessage.readBytes).
Uma mensagem de bytes é recebida por vários consumidores (um tópico) que possuem a propriedade consumerDoesNotModifyPayloadAfterGet ativada. Não A API JMS não permite que dados de bytes sejam passados por referência de volta ao código do consumidor (métodos BytesMessage.readBytes).
Mensagens de bytes com aplicativos encaminhadores    
Uma mensagem de bytes é encaminhada. Não Não há nenhum benefício obtido a partir da ativação de qualquer uma das propriedades de "transmissão de carga útil da mensagem por referência".

Ícone que indica o tipo de tópico Tópico de Conceito



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjn_passbyref_steps
Nome do arquivo: cjn_passbyref_steps.html