我正在开发一个基于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"));
}
}
答案 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使用条件响应。
答案 1 :(得分:0)
发现这是'setProperty'的方法 -
https://codedependents.com/2010/03/04/synchronous-request-response-with-activemq-and-spring/