0

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

  1. 创建一个用于接收响应的临时队列
  2. 将请求发送到标准请求队列,“回复”指向新的临时队列
  3. 等待临时队列上的响应
  4. 删除临时队列并重复

似乎为每个请求发布一个新的临时队列对于消息代理来说可能是昂贵的,并且可能会为每个请求引入额外的往返行程,以便首先创建临时目的地。我不想花很多时间自己验证这一点,我有点希望知道的人能证实这种直觉。改为为每个客户端会话创建一个临时队列并使用消息/相关 id 来匹配对请求的响应会更好吗?

4

2 回答 2

2

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

同样,数据库也没有针对动态创建和删除表进行优化;它是插入/更新/删除。

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

更新

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

于 2013-06-06T09:16:32.737 回答
1

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

于 2013-06-07T14:58:58.623 回答