Spring JMS:配置多消费者客户端

Spring JMS : Configure Multi Consumer client

我正在开发一个 Spring 基于 JMS 的客户端,它连接到 IBM MQ。

这部分工作正常!!

场景:

MQ 客户端可以从多个Spring“@Components”获取请求。考虑到,JMSTemplate 的 "send" 和 "receive" 是完全不同的方法 -

问题:

我们如何将组件一的响应与其请求关联起来?例如

A发送请求-A

B发送请求-B

SpringListener 如何知道响应 A 响应 A,响应 B 响应 B?

spring 是否提供开箱即用的功能来处理这种情况?

提前致谢!!

示例侦听器:

public class MessageReceiver implements MessageListener {

    @Override
    public void onMessage(Message message) {

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

发件人示例:

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"));
    }
}

基于 JMSReplyTo header 你可以用 JmsTemplate.sendAndReceive 发件人

在听众身边

    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());
            }
        }
   }

通过 Message.setStringProperty 在发送方设置消息 属性 并在侦听器中使用选择器或基于 StringProperty 的条件响应。

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

发现这是 'setProperty' -

的方法

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