每个请求对每个会话发出临时队列会影响性能吗?

时间:2013-06-05 21:10:56

标签: java performance jms activemq messaging

我一直在研究一些服务器端Java,它使用JMS与ApolloMQ消息代理进行交互。客户端通过执行以下操作向此服务器发出同步请求:

  1. 创建用于接收响应的临时队列
  2. 将请求发送到标准请求队列,并使用'reply-to'指向新的 临时队列
  3. 等待临时队列的响应
  4. 删除临时队列并重复
  5. 似乎为每个请求发布新的临时队列对于消息代理来说可能是昂贵的,并且可能为每个请求引入额外的往返以便首先创建临时目的地。我不想花很多时间自己验证这一点,我有点希望知道的人可以证实这种直觉。是否更好的是为每个客户端会话创建一个临时队列,并使用消息/相关ID来匹配对请求的响应?

2 个答案:

答案 0 :(得分:2)

从性能角度来看:消息代理是否针对发送/接收消息创建/删除队列进行了优化?

同样,数据库未经过优化,无法动态创建和删除表格;它是插入/更新/删除。

所以我会采用“相关ID”的方式。

更新

这并不一定意味着将响应放在与请求相同的队列中。每个客户端/会话可以有一个队列。

答案 1 :(得分:1)

使用correlationID涉及在消息队列上使用选择器 - 这比为请求响应创建临时队列要慢(请参阅http://camel.apache.org/jms.html上的“通过JMS请求 - 回复”以比较各种选项)。