我一直在研究一些服务器端Java,它使用JMS与ApolloMQ消息代理进行交互。客户端通过执行以下操作向此服务器发出同步请求:
似乎为每个请求发布新的临时队列对于消息代理来说可能是昂贵的,并且可能为每个请求引入额外的往返以便首先创建临时目的地。我不想花很多时间自己验证这一点,我有点希望知道的人可以证实这种直觉。是否更好的是为每个客户端会话创建一个临时队列,并使用消息/相关ID来匹配对请求的响应?
答案 0 :(得分:2)
从性能角度来看:消息代理是否针对发送/接收消息或创建/删除队列进行了优化?
同样,数据库未经过优化,无法动态创建和删除表格;它是插入/更新/删除。
所以我会采用“相关ID”的方式。
更新
这并不一定意味着将响应放在与请求相同的队列中。每个客户端/会话可以有一个队列。
答案 1 :(得分:1)
使用correlationID涉及在消息队列上使用选择器 - 这比为请求响应创建临时队列要慢(请参阅http://camel.apache.org/jms.html上的“通过JMS请求 - 回复”以比较各种选项)。