0

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

参考链接:我应该如何使用 JMS 实现请求响应

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

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

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

即在启动时创建消费者和临时队列。为该消息设置 jmsreplyto 和相关 ID。使用该相关 ID,我们可以轻松获取该消息。

“这也意味着你可以在多个线程中共享相同的生产者和消费者,如果你愿意(或者可能是池化它们)”。

我不明白这条线是什么意思?在不同的线程中我们可以访问临时队列吗?这没有任何意义吗?谁能解释一下

4

1 回答 1

0

要将消息发送到队列,我们​​需要生产者。并读出我们需要消费者的消息。

让我们为每个线程(不是 java 线程,而是一系列请求-响应)设置一个单独的临时 JMSQueue。这意味着为队列生成一个生产者对象。所以该语句意味着您只创建一个生产者对象以及消费者。这意味着对于每个通信线程,您将拥有多个生产者和消费者以及 JMSQeueus。

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

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

于 2013-11-12T07:12:04.473 回答