Estoy desarrollando un cliente basado en Spring JMS, que se conecta a un IBM MQ.

¡Esta parte está funcionando bien!

Escenario:

El cliente MQ puede obtener una solicitud de varios Spring "@Components". Considerando que "enviar" y "recibir" de JMSTemplate son métodos completamente diferentes -

Pregunta:

¿Cómo correlacionamos la respuesta del componente uno con solo su solicitud? p.ej.

A envía solicitud-A

B envía solicitud-B

¿Cómo sabrá SpringListener responder la respuesta A a A y la respuesta B a B?

¿Spring proporciona una funcionalidad lista para usar para manejar tal escenario?

Gracias por adelantado !!

Escucha de muestra:

public class MessageReceiver implements MessageListener {

    @Override
    public void onMessage(Message message) {

        if(message instanceof TextMessage){
            System.out.println(message.toString());
        }
    }
}

Ejemplo de remitente:

public class App 
{
    public static void main( String[] args )
    {

        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        JmsTemplate jmsTemplate = (JmsTemplate)context.getBean("jmsTemplate");

        jmsTemplate.send(s -> s.createTextMessage("TestingAMQ"));
    }
}
0
Deep 14 nov. 2017 a las 12:10

2 respuestas

La mejor respuesta

Encontré que este es el enfoque de 'setProperty' -

https://codedependents.com/2010/03/04/synchronous-request-response-with-activemq-and-spring/

0
Deep 15 nov. 2017 a las 04:05

Basado en el encabezado JMSReplyTo puedes hacerlo con JmsTemplate.sendAndReceive para el remitente

Y en el oyente al lado

    public class MessageReceiver implements MessageListener {

        @Override
        public void onMessage(Message message) {
            jmsTemplate.send(message.getJMSReplyTo(), s -> s.createTextMessage("TestingAMQ"));
            if(message instanceof TextMessage){
                System.out.println(message.toString());
            }
        }
   }

O

Estableciendo una propiedad de Mensaje en el lado del remitente por Message.setStringProperty y usando selectores en el oyente o respuesta condicional basada en StringProperty.

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jms/core/JmsTemplate.html#sendAndReceive-org.springframework.jms.core.MessageCreator-

1
Hassen Bennour 14 nov. 2017 a las 12:24