我正在开发一个基于 Spring JMS 的客户端,它连接到 IBM MQ。
这部分工作正常!!
场景:
MQ 客户端可以从多个 Spring "@Components" 获取请求。考虑到,JMSTemplate的"发送"和"接收"是完全不同的方法——
问题:
我们如何将组件一的响应与仅其请求相关联?例如
A发送请求-A
B发送请求-B
SpringListener 如何知道
将响应 A 响应 A 响应,响应 B 响应 B 响应 B?弹簧是否提供了开箱即用的功能来处理这种情况?
提前感谢!!
示例侦听器:
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
标头 发件人的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 属性,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/