论坛首页 Java企业应用论坛

关于ActiveMQ队列之间协作的讨论

浏览 10130 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-08-02   最后修改:2010-08-02
SOA
我们都知道向mq队列或主题发送消息都是异步的,也就是说发送者只要将消息放到mq中就可以继续执行其它指令,不必阻塞等待消息回应。现在有一个场景,怎么样用mq队列协作来解决类似于RMI远程调用请求的功能,即发送者需要消息回应。

我是这样想的,大家看看有没有什么问题:
首先得需要两个队列A和B。接收者监听B,发送者监听A。
发送者将消息X发送到队列A中,接收者通过消息驱动的方式接收到X,并将响应消息Y发送到队列B中,接收者再接收消息Y,进行处理。

以上方式的问题在于,因为是异步的,发送者接收到的消息Y不一定是自己上次请求的回应。我的方法是通过将Y消息缓存起来的方式予以解决。
   发表时间:2010-08-02  
你所叙述的场景不适合使用AMQ
0 请登录后投票
   发表时间:2010-08-02  
JMS不是有reply功能吗?可以创建temp queue做reply,无需这样吧。
0 请登录后投票
   发表时间:2010-08-02  
dennis_zane 写道
JMS不是有reply功能吗?可以创建temp queue做reply,无需这样吧。

那个也是异步的, 他的场景是要求同步回复。
0 请登录后投票
   发表时间:2010-08-02  
dennis_zane 写道
JMS不是有reply功能吗?可以创建temp queue做reply,无需这样吧。

那我得好好看看这个replay能不能满足我的需求。
0 请登录后投票
   发表时间:2010-08-02  
mikewang 写道
你所叙述的场景不适合使用AMQ

我知道AMQ不合适,用webservice最好,我现在就这考虑这个可能性,非用AMQ不可。
0 请登录后投票
   发表时间:2010-08-02   最后修改:2010-08-02
mikewang 写道
dennis_zane 写道
JMS不是有reply功能吗?可以创建temp queue做reply,无需这样吧。

那个也是异步的, 他的场景是要求同步回复。

JMS有提供QueueRequestor或者TopicRequestor这样的工具类将异步转同步,请求/响应模型JMS有定义的。楼主完全没必要自己做,JMS本身就提供了这个功能。
0 请登录后投票
   发表时间:2010-08-02  
dennis_zane 写道
mikewang 写道
dennis_zane 写道
JMS不是有reply功能吗?可以创建temp queue做reply,无需这样吧。

那个也是异步的, 他的场景是要求同步回复。

JMS有提供QueueRequestor这样的工具类将异步转同步,请求/响应模型JMS有定义的。


哦, 这个我还真不知道, 我去看看。 谢谢提醒
0 请登录后投票
   发表时间:2010-08-02  
dennis_zane 写道
mikewang 写道
dennis_zane 写道
JMS不是有reply功能吗?可以创建temp queue做reply,无需这样吧。

那个也是异步的, 他的场景是要求同步回复。

JMS有提供QueueRequestor或者TopicRequestor这样的工具类将异步转同步,请求/响应模型JMS有定义的。楼主完全没必要自己做,JMS本身就提供了这个功能。

以下来自百度:
JMS提供了QueueRequestor,这是一个能发送请求和接收应答的简单类。请求者包含一个QueueSender来发送请求,并且利用一个QueueReceiver接收应答。每个请求者会创建自己的临时队列以接收应答,并把该队列的地址设置在请求消息的reply-to属性中。请示者发送和接收应答的代码非常简单:
QueueConnection connection=//获得连接
Queue requestQueue=//获得队列
Message request=//创建请求消息
QueueSession session=connection.CreateQueueSession(false,Session.AUTO_ACKNOWLEDGE);
QueueRequestor requestor=new QueueRequestor(session,requestQueue);
Message reply=requestor.request(request);

request方法负责发送请求消息,这个方法会阻塞,直到接收应答消息为止。
QueueRequestor使用的TemporaryQueue是一个点对点通道。相应的发布-订购通道是TemporaryTopic和TopicRequestor

看来是我孤陋寡闻了。。
0 请登录后投票
   发表时间:2010-08-02  
dennis_zane 写道
mikewang 写道
dennis_zane 写道
JMS不是有reply功能吗?可以创建temp queue做reply,无需这样吧。

那个也是异步的, 他的场景是要求同步回复。

JMS有提供QueueRequestor或者TopicRequestor这样的工具类将异步转同步,请求/响应模型JMS有定义的。楼主完全没必要自己做,JMS本身就提供了这个功能。

请问有没有什么具体的例子,这个请求/响应模型不会只是告诉发送者接收者已经收到消息了吧。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics