2

我们的一位客户有一个基于 JMS 的实现,其中有用于读取/写入消息的队列。JMS 客户端需要写入出站队列,然后它将从入站队列中读取响应。JMS 客户端将跨多个站点部署,并将与单个出站队列通信以写入消息,并将从入站队列(仅一个)读取响应。考虑这样一个场景,其中有 100 个唯一的出站请求,然后消费者对发送的请求获得 100 个不同的响应(假设消息正确传递)。如何确保消费者从入站队列中读取的消息是针对指定收件人的?我们是否必须编写自己的逻辑来映射请求/响应?或者 JMS 是否有任何基于连接 ID 的传递机制……等等,以便将消息传递给正确的请求者。非常感谢您,需要您的专家意见来正确设计应用程序。我使用的 JMS 提供程序是 Apache ActiveMQ。

问候, Sumeet C

4

1 回答 1

2

听起来你需要REQUEST/REPLY...

请求/回复 - 同步
队列发送者发送一条REQUEST消息,然后在同一个线程中接收一个REPLY. 发送线程阻塞,直到接收者发回回复消息,确保回复是针对原始请求的。REPLY_TO这是一个使用临时队列、寻址和JMSCorrelationID...的基本设置

JMS 请求/回复的Apache ActiveMQ 请求/回复
EAI 模式

点对点 - 异步
如果客户的 JMS 实现为发送请求和接收回复提供了不同的队列,您可以使用唯一的异步发送消息JMSCorrelationID,并且如果客户发送回具有相同 id 的响应,您可以接收响应消息在不同的线程中,并根据 JMSCorrelationID 将它们与原始请求相关联。从技术上讲,REQUEST/REPLY除了它阻塞并使用临时队列将响应消息发送回请求者而不是显式命名的队列之外,它做同样的事情。

于 2013-05-13T14:48:45.067 回答