【问题标题】:JMS multiple consumers for a single queue单个队列的 JMS 多个使用者
【发布时间】:2013-05-07 11:37:34
【问题描述】:

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

问候, 苏梅特C

【问题讨论】:

    标签: jms


    【解决方案1】:

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

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

    Apache ActiveMQ Request/Reply
    EAI Patterns for JMS Request/Reply

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

    【讨论】:

    • 非常感谢您的回复。我现在可以以更好的方式实施解决方案
    猜你喜欢
    • 1970-01-01
    • 2013-04-22
    • 2011-10-23
    • 2012-07-14
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2015-09-18
    相关资源
    最近更新 更多