我们的一个客户有一个基于JMS的实现,其中有用于读/写消息的队列。 JMS客户端需要写入出站队列,它将从入站队列中读取响应。 JMS客户端将部署在多个站点上,并将与单个出站队列通信以写入消息,并将从入站队列(仅一个)读取响应。考虑这样一种情况,其中有100个唯一的出站请求,然后消费者为发送的请求获得100个不同的响应(假设消息已正确传递)。如何确保消费者从入站队列中读取的消息是针对指定的收件人的?我们是否必须编写自己的逻辑来映射请求/响应?或者JMS是否具有基于连接ID ...等的任何传递机制,以便将消息传递给正确的请求者。非常感谢您提前,需要您的专家输入才能正确设计应用程序。我使用的JMS提供程序是Apache ActiveMQ。
此致 Sumeet C
答案 0 :(得分:2)
听起来你需要REQUEST/REPLY
...
请求/回复 - 同步
队列发送方发送REQUEST
消息,然后在同一线程中接收REPLY
。发送线程阻塞,直到接收方发回回复消息,确保回复是针对原始请求。这是一个使用临时队列,REPLY_TO
寻址和JMSCorrelationID
...
Apache ActiveMQ Request/Reply
EAI Patterns for JMS Request/Reply
点对点 - 异步
如果客户的JMS实现为发送请求和接收回复提供了不同的队列,则可以使用唯一的JMSCorrelationID
异步发送消息,并且如果客户发回具有相同ID的响应,则可以在不同的线程并根据JMSCorrelationID将它们与原始请求相关联。从技术上讲,REQUEST/REPLY
执行相同的操作,除了它阻塞并使用临时队列将响应消息发送回请求者而不是显式命名的队列。