JMS API是否支持异步双向消息传递?

时间:2011-11-29 05:48:39

标签: java jms

我见过的例子似乎支持几个用例:

  1. 点到点 - 从发布者到消费者的单一发布者到单一消费者的单向通信
  2. 发布/订阅 - 发布者到多个消费者,从发布者到消费者的单向通信
  3. 请求/响应 - 单个发布者到单个消费者,双向通信但阻止
  4. 我正在寻找的是双向异步消息传递。例如,我想做以下

    Publisher: "Hello world" to consumer
    Consumer: Process "Hello world"
    
    Wait 5 minutes
    
    Consumer: "Hello publisher" to publisher
    Publisher: Process "Hello publisher"
    

    API是否支持上述用例?或者我是否需要同时实现发布者和消费者的所有内容?

4 个答案:

答案 0 :(得分:1)

最有可能最好的办法是使用2个队列。每一侧的相同对象可以是一个队列上的生产者,另一个上是消费者。然后你有:

Object1 "Hello world" -> queueDirection1 ->  Object2 processes "hello world" 
Object2 "Hello world" -> queueDirection2 ->  Object1 processes "hello world" 

现在这完全是异步的,队列之间没有时间要求。

我认为任何具有单个队列或单个主题的配置都存在意外阻止或可能自我接收消息的风险。如果消息速率增加或处理时间增加,请务必考虑系统的行为方式。

答案 1 :(得分:0)

我自己没有尝试过,但使用JMSReplyTo的实现可能是一种解决此问题的方法。

从ActiveMQ

中查看此How should I implement request response with JMS?文档

答案 2 :(得分:0)

JMS没有符合您要求的API。您可以使用点对点消息传递来实现您的需求。

发布者“Hello World” - > Q1 - >消费者流程“Hello World”。

等待5秒

消费者称“Hello World” - > Q1 - >发布者处理“Hello World”

答案 3 :(得分:0)

您可以使用Apache Camel http://camel.apache.org/并使用JMS组件以In / InOut方式发送消息。如果您使用inOut方式,Camel会创建一个临时队列来为每个请求发送回复。 它还为各种消息处理和消息内容丰富提供了很多可能性。