Pasar carga útil de mensajes por referencia: ventajas potenciales para cada paso de proceso

Para cada paso de proceso que realiza la aplicación de mensajería JMS, compruebe esta tabla para ver por qué y cuándo hay una ventaja potencial de rendimiento si se habilitan las propiedades "pasar carga útil de mensajes por referencia" en la especificación de activación o en la fábrica de conexiones asociada.

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 se habilitan las propiedades pasar carga útil de mensajes por referencia en una fábrica de conexiones o especificación de activación, se indica al proveedor de mensajería predeterminado que altere temporalmente la especificación JMS 1.1 y reduzca u omita potencialmente esta copia de datos.

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 en el tema Porqué y cuándo pasar la carga útil de mensaje JMS por referencia, o se corre el riesgo de perder la integridad de los datos.
Para pasar la carga útil de mensajes según su referencia, establezca las siguientes propiedades en las fábricas de conexiones y especificaciones de activación:
producerDoesNotModifyPayloadAfterSet (para fábricas de conexiones) o forwarderDoesNotModifyPayloadAfterSet (para especificaciones de activación)
Cuando esta propiedad está habilitada, el objeto o los mensajes de bytes producidos por la fábrica de conexiones o remitidos a través de la especificación de activación no se copian cuando se establecen en el mensaje y sólo se serializan cuando es absolutamente necesario. Las aplicaciones que envían estos mensajes no deben modificar los datos hasta que se hayan establecido en el mensaje.
consumerDoesNotModifyPayloadAfterGet
Cuando esta propiedad está habilitada, los mensajes de objeto recibidos a través de la fábrica de conexiones o la especificación de activación sólo se serializan cuando es absolutamente necesario. Las aplicaciones no deben modificar los datos obtenidos de estos mensajes.
Tabla 1. Ventajas potenciales en el rendimiento para cada paso de proceso efectuado por la aplicación generadora, consumidora o de reenvío. La primera columna de la tabla lista los pasos de proceso para los objetos y mensajes de bytes. La segunda columna indica si hay posibilidad de mejorar el rendimiento. La tercera columna proporciona una breve explicación acerca de los procesos y las propiedades.
Paso de proceso ¿Hay potencial para la mejora en el rendimiento? Explicación
Objetos de mensajes con aplicaciones generadoras y consumidoras    
Un mensaje de objeto se envía a una aplicación consumidora en la misma JVM. Las propiedades producerDoesNotModifyPayloadAfterSet y consumerDoesNotModifyPayloadAfterGet están las dos habilitadas. Bajo determinadas condiciones, el objeto de carga útil se pasa por referencia a la aplicación consumidora.

Si el mensaje no es persistente ni se tramita, y la aplicación consumidora está disponible inmediatamente, puede que el objeto de carga útil nunca se serialice.

Un mensaje de objeto se produce con la propiedad producerDoesNotModifyPayloadAfterSet habilitada, y luego lo recibe una aplicación consumidora para la que la propiedad consumerDoesNotModifyPayloadAfterGet no está habilitada. No No se obtiene ninguna ventaja porque la aplicación consumidora no tiene habilitada la propiedad consumerDoesNotModifyPayloadAfterGet.
Un mensaje de objeto se envía a una única aplicación consumidora en una JVM distinta. Las propiedades producerDoesNotModifyPayloadAfterSet y consumerDoesNotModifyPayloadAfterGet están las dos habilitadas. No No se obtiene ninguna ventaja porque la aplicación consumidora única está en otra JVM.
Varias aplicaciones consumidoras (un tema) que tienen habilitada la propiedad consumerDoesNotModifyPayloadAfterGet y que se ejecutan en la misma JVM reciben un mensaje de objeto. Todas las aplicaciones consumidoras con la propiedad consumerDoesNotModifyPayloadAfterGet habilitada pueden recibir una referencia al mismo objeto, aunque esto no está garantizado.
Mensajes de objeto con aplicaciones de reenvío    
Un mensaje de objeto se envía y la aplicación de envío accede a la carga útil del mensaje. Las propiedades consumerDoesNotModifyPayloadAfterGet y producer/forwarderDoesNotModifyPayloadAfterSet están habilitadas. Existe una ventaja potencial en el rendimiento en los siguientes casos:
  • El generador del mensaje de reenvío tiene habilitada la propiedad producerDoesNotModifyPayloadAfterSet y está en la misma JVM que la aplicación de reenvío.
  • El consumidor del mensaje de reenvío tiene habilitada la propiedad consumerDoesNotModifyPayloadAfterGet y está en la misma JVM que la aplicación de reenvío.
Un mensaje de objeto se envía y la aplicación de envío accede a la carga útil del mensaje. Sólo está habilitada la propiedad producer/forwarderDoesNotModifyPayloadAfterSet. Existe una ventaja potencial en el rendimiento si el consumidor del mensaje de reenvío tiene habilitada la propiedad consumerDoesNotModifyPayloadAfterGet y está en la misma JVM que la aplicación de reenvío.
Un mensaje de objeto se envía y la aplicación de envío no accede a la carga útil del mensaje. No Si la aplicación de reenvío no puede acceder a la carga útil del mensaje de objeto, las propiedades producer/forwarderDoesNotModifyPayloadAfterSet y consumerDoesNotModifyPayloadAfterGet no tienen ningún efecto para la aplicación de reenvío. Se mantienen las ventajas obtenidas de la aplicación generadora original y la aplicación consumidor final.
Mensajes de objeto con mediaciones    
Un mensaje de objeto se envía a un destino de bus de integración de servicios mediado. No Si el mensaje de objeto se envía a un destino mediado, no se obtiene ninguna ventaja en el rendimiento habilitando la propiedad producerDoesNotModifyPayloadAfterSet.
Mensajes de bytes con aplicaciones consumidoras    
Un mensaje de bytes se envía a cualquier aplicación consumidora. La propiedad producerDoesNotModifyPayloadAfterSet está habilitada. Se omite la parte de la especificación JMS que manda copiar los datos estableciéndolo en el mensaje, guardando una copia de los datos de bytes.
Un mensaje de bytes se recibe con la propiedad consumerDoesNotModifyPayloadAfterGet habilitada. No La API JMS no permite volver a pasar los datos por referencia al código de consumidor (métodos BytesMessage.readBytes).
Varios consumidores (un tema) que tienen habilitada la propiedad consumerDoesNotModifyPayloadAfterGet reciben un mensaje de bytes. No La API JMS no permite volver a pasar los datos por referencia al código de consumidor (métodos BytesMessage.readBytes).
Mensajes de bytes con aplicaciones de reenvío    
Se reenvía un mensaje de bytes. No No se obtiene ninguna ventaja de habilitar cualquiera de las propiedades "pasar carga útil de mensajes por referencia".

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_steps
File name: cjn_passbyref_steps.html