我如何分享同一个制作人和在activemq中跨越多个线程的消费者?

时间:2013-11-12 06:57:59

标签: java jms activemq messaging

下面我用一篇关于临时队列的文章来解释我的想法。我只是想知道我对此是对还是错。

  

参考链接:How should I implement request response with JMS

“创建临时目标,使用者,生产者和连接都是与代理的同步请求 - 响应操作,因此应该避免处理每个请求,因为这会导致与JMS代理进行大量聊天。”

即消费者和生产者,临时队列在同一会话或连接中。如果我们关闭连接或会话,临时队列将消失。我们无法在不同的session.in中获取临时队列。它将与activemq进行大量聊天。

“通过JMS实现请求 - 响应的最佳方法是在启动时为每个客户端创建临时队列和使用者,将每个消息上的JMSReplyTo属性设置为临时队列,然后对每条消息使用correlationID将请求消息关联到响应消息。这避免了为每个请求创建和关闭消费者的开销(这很昂贵)“

即在starup中创建消费者和临时队列。为该消息设置jmsreplyto和correlationid。使用该correlationid我们可以轻松获取消息。

  

“这也意味着你可以在许多线程中共享同一个生产者和消费者,如果你想要(或者可能将它们集中在一起)”。

我不明白这条线在解释什么?在不同的线程我们可以访问临时队列?它没有任何意义?任何人都可以解释这个

1 个答案:

答案 0 :(得分:0)

要向队列发送消息,我们需要生产者。并宣读我们需要消费者的信息。

让我们考虑每个线程的想法(不是java线程,而是一系列请求 - 响应)我们设置一个单独的临时JMSQueue。这意味着为Queue生成一个生产者对象。 所以声明意味着你只创建一个生产者对象以及消费者。这意味着每个通信线程都会有多个生产者和消费者以及JMSQeueus。

更改逻辑并为每个通信线程分配唯一键。 您设置了一个JMSQueue,它在启动时加载。 生产者对象将始终为JMSQueue打开连接会话。我们只需调用相同生产者对象的方法并将消息推送到Queue。每条消息都有一个相关/唯一ID来引用通信线程

在侦听器端,您只需为Queue设置一个侦听器。侦听器只接受对象,解析特定的相关/唯一ID并将其传递给相应的线程。

相关问题