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

时间:2017-11-14 09:10:23

标签: jms spring-jms jmstemplate

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

这部分工作正常!!

情境:

MQ客户端可以从多个Spring" @ Components"获取请求。考虑到,JMSTemplate"发送"并且"收到"是完全不同的方法 -

问题:

我们如何将组件一的响应与其请求相关联? e.g。

发送请求-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"));
    }
}

2 个答案:

答案 0 :(得分:1)

基于JMSReplyTo标题,您可以执行此操作 发件人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在发送方设置Message属性,并在侦听器中使用选择器或基于StringProperty使用条件响应。

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

答案 1 :(得分:0)