Transmitir carga útil da mensagem por referência: Código de exemplo para aplicativos de produtor e consumidor

Codifique seus aplicativos JMS para que você possa transmitir com segurança as cargas úteis de mensagens por referência para o sistema de mensagens assíncrono entre aplicativos do produtor e do consumidor dentro de um único servidor.

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 os aplicativos do consumidor estiverem na mesma JVM e você ativar as propriedades transmitir carga útil da mensagem por referência nos connection factories associados e nas especificações de ativação, as cargas úteis da mensagem poderão ser transmitidas do aplicativo do produtor para o aplicativo do consumidor. Isso poderá reduzir ou ignorar a cópia de dados e aprimorar o desempenho e o uso de memória.

Na seguinte figura, as mensagens são transmitidas a partir de um aplicativo produtor JMS por meio de um connection factory do produtor para uma fila em um mecanismo do sistema de mensagens. Eles são obtidos a partir da fila e transmitidos por meio de um connection factory do consumidor ou da especificação de ativação para um aplicativo consumidor JMS.

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 ou haverá o risco de perder a integridade de dados.
Figura 1. Produzindo e consumindo mensagens
Esta figura descreve o fluxo de mensagens de um aplicativo produtor JMS para uma fila em um mecanismo do sistema de mensagens. Em seguida, as mensagens são passadas para um aplicativo consumidor JMS por meio de um connection factory de consumidor ou de propriedades de especificação de ativação.
Se você ativar a propriedade producerDoesNotModifyPayloadAfterSet para o connection factory do produtor, o aplicativo do produto deverá garantir que não modificará o objeto de carga útil depois de configurá-lo nas mensagens de object ou bytes. Para ajudá-lo a conseguir isso, aqui está algum código de exemplo que é possível adaptar para utilizar em seu aplicativo:
DataObject data = new DataObject(); 
data.setXXX("xxx"); 
data.setYYY(yyy); 
ObjectMessage message = session.createObjectMessage(); 
message.setObject(data); 
data = null; 
producer.send(message); 
Para mensagens de bytes, o aplicativo do produtor deve garantir também gravar apenas uma única matriz de byte completa na mensagem. Para ajudá-lo a conseguir isso, aqui está algum código de exemplo que é possível adaptar para utilizar em seu aplicativo:
byte [] data = myByteData; 
BytesMessage message = session.createBytesMessage(); 
message.writeBytes(data); 
data = null;	 
producer.send(message);
Se você ativar a propriedade consumerDoesNotModifyPayloadAfterGet para o connection factory do consumidor ou a especificação da ativação, o aplicativo do consumidor deverá garantir que não modificará a carga útil que obtém da mensagem do object (o consumo de mensagens de bytes não é afetado pela propriedade consumerDoesNotModifyPayloadAfterGet). Para ajudá-lo a conseguir isso, aqui está algum código de exemplo que é possível adaptar para utilizar em seu aplicativo:
public void onMessage (Message message)
{
   ObjectMessage oMessage = (ObjectMessage) message;
   DataObject data = oMessage.getObject();
   System.out.print(data.getXXX());
   System.out.print(data.getYYY());
}

Í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_prodcons
Nome do arquivo: cjn_passbyref_prodcons.html