Pasar carga útil de mensajes por referencia: código de ejemplo para aplicaciones generadoras y consumidoras

Codifique las aplicaciones JMS de modo que pueda pasar de forma segura cargas útiles de mensajes por referencia para la mensajería asíncrona entre aplicaciones generadoras y consumidoras dentro de un servidor único.

Cuando se envían mensajes de objetos o de bytes de gran tamaño, el coste en memoria y el uso del procesador para serializar, deserializar y copiar la carga de trabajo del mensaje puede ser muy significativo. Si las aplicaciones generadora y consumidora están en la misma JVM y habilita las propiedades pasar carga útil de mensajes por referencia en las fábricas de conexiones y especificaciones de activación asociadas, las cargas útiles de mensaje se pueden pasar por referencia de la aplicación generadora a la aplicación consumidora. Esto puede reducir u omitir la copia de datos y mejorar el rendimiento y el uso de la memoria.

En la figura siguiente, los mensajes pasan de una aplicación generadora JMS, a través de una fábrica de conexiones generadora, a una cola de un motor de mensajería. A continuación, se sacan de la cola y pasan, a través de una especificación de activación o fábrica de conexiones consumidora, a una aplicación consumidora JMS.

PRECAUCIÓN:
Las partes de la Especificación JMS que se omiten en estas propiedades se definen para garantizar la integridad de datos de mensajes. Cualquiera de las aplicaciones JMS que utilice estas propiedades debe seguir de forma estricta las reglas descritas, de lo contrario, se puede perder la integridad de los datos.
Figura 1. Cómo producir y consumir mensajes
Esta figura describe el flujo de mensajes de una aplicación generadora JMS a una cola de un motor de mensajería. A continuación, los mensajes se pasan a una aplicación consumidora JMS a través de una fábrica de conexiones consumidora o propiedades de especificación de activación.
Si habilita la propiedad producerDoesNotModifyPayloadAfterSet para la fábrica de conexiones generadora, la aplicación generadora debe garantizar que no modificará el objeto de carga útil una vez éste se ha establecido en mensajes de objeto o bytes. Para ayudar a lograrlo, a continuación se muestra un código de ejemplo que puede adaptar para utilizarlo en la aplicación:
DataObject data = new DataObject(); 
data.setXXX("xxx"); 
data.setYYY(yyy); 
ObjectMessage message = session.createObjectMessage(); 
message.setObject(data); 
data = null;	 
producer.send(message); 
Para los mensajes de bytes, la aplicación generadora también debe garantizar que sólo grabará una sola matriz de bytes completa en el mensaje. Para ayudar a lograrlo, a continuación se muestra un código de ejemplo que puede adaptar para utilizarlo en la aplicación:
byte [] data = myByteData; 
BytesMessage message = session.createBytesMessage(); 
message.writeBytes(data); 
data = null;	 
producer.send(message); 
Si habilita la propiedad consumerDoesNotModifyPayloadAfterGet para la especificación de activación o la fábrica de conexiones consumidora, la aplicación consumidora debe garantizar que no modificará la carga útil que obtiene el mensaje de objeto (el consumo de mensajes de bytes no resulta afectado por la propiedad consumerDoesNotModifyPayloadAfterGet). Para ayudar a lograrlo, a continuación se muestra un código de ejemplo que puede adaptar para utilizarlo en la aplicación:
public void onMessage (Message message)
{
   ObjectMessage oMessage = (ObjectMessage) message;
   DataObject data = oMessage.getObject();
   System.out.print(data.getXXX());
   System.out.print(data.getYYY());
}

Icon that indicates the type of topic Concept topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjn_passbyref_prodcons
File name: cjn_passbyref_prodcons.html