He hecho una aplicación java que utiliza JMS para enviar mensajes a una Cola MQ. Me puse el id de mensaje y el identificador de correlación con la setJMSMessageId() y setJMSCorrelationId(). El mensaje parece ser sobrescritos cuando el envío de los extremos. Busqué en google un poco, y parece que el servidor sobrescribe el idmensaje incluso cuando usted envía.

El requisito de esta aplicación es que tanto idmensaje y correlationId tienen el mismo valor cuando se envían y cuando los reciba. ¿No hay nada que yo pueda hacer acerca de esto?

Nota: estoy usando el JDK 1.6, y un 8,5 a implementar la aplicación. Este SE comunica con un Administrador de colas MQ.

InformationsquelleAutor Xanathos | 2014-04-25

4 Comentarios

  1. 6

    Identificadores de mensaje están reservados para el sistema de mensajería para configurar. Usted puede leer y, por ejemplo, inicie sesión o aún persisten, pero nada más. Esp., no se supone que ser establecida por una aplicación! El setter es no sólo cuando la construcción del puente entre dos sistemas de mensajería, es decir, cuando se recibe un mensaje de un sistema de mensajería X y enviarla a un diferente sistema de mensajería Y. a Continuación, Y debe ser capaz de establecer el identificador del mensaje que el objeto del mensaje, aunque Y no lo ha creado, es decir, a pesar de que no Y de la propia aplicación. Existen varios métodos para este caso de uso y que está causando una gran confusión; lo mejor es ignorarlos.

    OTOH, correlación de ids para su aplicación a utilizar. Una muy común es el patrón de un solicitud-respuesta par de mensajes, y esta es la segunda fuente de confusión:

    1. Un original de Un remitente envía un mensaje a un destino D con la respuesta campo de encabezado de conjunto a un destino D», donde Una espera de recibir las respuestas. El identificador del mensaje se establece por el sistema de mensajería cuando se llama a uno de los diversos send métodos, y las tiendas de este id de mensaje.
    2. Entonces B recibe el mensaje, se encarga de la lógica de negocio, y las respuestas a D’. También se establece el identificador de correlación para el identificador del mensaje que acaba de recibir. El mensaje de respuesta también recibe un nuevo mensaje de id del sistema de mensajería, pero eso es irrelevante para este patrón.
    3. Finalmente recibe el mensaje de respuesta de D’, lee el identificador de correlación, y la utiliza para buscar el identificador del mensaje que ha almacenado en el paso 1.

    Hay un montón de otros modelos de intercambio de mensajes, como una solicitud-muchas respuestas o mensajes no solicitados, y el uso adecuado de correlación id es esencial; pero de solicitud-respuesta es por mucho el más común. Por eso es sugerido en el JavaDoc. De lo contrario, identificadores de mensaje no tiene nada que ver con la correlación de los identificadores de. Esto es confuso para los principiantes. Incluso me he encontrado con que es preferible que se correlacionan con los mensajes de negocio claves en lugar de identificadores de mensaje.

    Volviendo a tu pregunta: como se establece la correlación de identificación antes de enviar el mensaje, y el mensaje de identificación se establece el sistema de mensajes al enviar el mensaje, no hay ninguna manera en la JMS-API para hacer ambos valores el mismo valor.

    • Ok, entendido. Así que vamos a decir, Si puedo transferir un mensaje de un DataQueue a un MQ, ¿hay una manera en la que después de la JMS-API establece el id de mensaje, puedo configurar el identificador de correlación a ser el mismo valor que el identificador del mensaje?
    • El identificador del mensaje se establece en el método de envío, y después de que aparece el mensaje, el mensaje es probable que ya persistió, de alguna manera, es decir, incluso si quieres cambiar el objeto del mensaje, el mensaje que se envía puede o no puede tener el identificador de correlación que has establecido. Puede ser vale la pena intentarlo, pero definitivamente no es portátil.
  2. 3
    I set it in the application because MQ needs it

    IBM MQ no requiere un Idmensaje se establece, MQ generará un único Mensaje en su propio. Al responder, la respuesta de la aplicación debe utilizar el Idmensaje (establecido por IBM MQ)de la entrada (aka petición) mensaje y establecer como CorrelationID en el mensaje de respuesta. De esta manera, el solicitante de la aplicación será capaz de relacionar la solicitud de & respuesta.

  3. 2

    Me puse el id de mensaje y el identificador de correlación con la setJMSMessageId() y
    setJMSCorrelationId().

    Quien dijo que para ello, no entiende adecuado diseño de la mensajería y no debe ser el diseño de infraestructura de middleware. Un mensaje de identificador debe ser único en un MQ medio ambiente. Si necesita compartir un token/valor de datos entre 2 aplicaciones de mensajería, a continuación, utilizar el identificador de correlación.

    • Ok, para empezar, que se configura cuando se trata de otra cola (que no tiene mensaje o identificador de correlación), lo puse en la aplicación porque MQ necesidades, y la idea es que se devuelve con el mismo mensaje y el identificador de correlación en la respuesta (I send 1 y 2, por lo que la respuesta debe ser 1 y 2, así). No veo en ello, quiero decir, la idea es que ambos siguen siendo únicos durante toda la comunicación. Sólo para tu información, el mensaje proviene de un DataQueue en un AS400. Es por eso que no hay idmensaje o identificador de correlación.
  4. 0

    Compartir mi experiencia con el doble de IDs después de 4 años –

    JMSMessageID es un encabezado de la propiedad establecidas por el Proveedor JMS. Lo que ocurre en tiempo de ejecución cuando el mensaje se envía a la Cola.

    Pero JMSCorrelationID es un encabezado de la propiedad que se puede establecer por parte de los usuarios para correlacionar el mismo mensaje a través de diferentes Proveedores de JMS.
    Citando de Documentación De Oracle

    Un JMSCorrelationID puede contener uno de los siguientes:

    1. Específico de un proveedor ID de mensaje
    2. Una aplicación específica de la Cadena de
    3. Un proveedor nativo byte[] valor

    En algunos casos, una aplicación (compuesto de varios clientes) necesita
    el uso de una aplicación específica de valor para la vinculación de los mensajes. Por ejemplo,
    una aplicación puede utilizar JMSCorrelationID para mantener un valor de referencia
    alguna información externa. La aplicación de los valores especificados no se debe Empezar a
    con el ‘ID:’ prefijo; este está reservado para el proveedor de mensaje generado
    Los valores de ID.

Dejar respuesta

Please enter your comment!
Please enter your name here