如何选择主题与队列

时间:2012-03-02 06:50:31

标签: java concurrency jms messaging eai

当我们设计应用程序时如何选择Topic / Queue类型实现 我知道,
a)如果有多个消费者使用该消息,则使用主题
b)如果只有一个消费者使用队列

请提供更多需要考虑的要点?
例如,并发,消息持久性,负载平衡,还有其他什么?

感谢。
RW

1 个答案:

答案 0 :(得分:2)

如果只有一个消费者使用队列,则不完全正确。

我们有一个Java EE应用程序,我们对保险报价进行评级。我们有一个RatingIn队列和一个RatingOut队列。我们所有的客户都写入RatingIn队列并从RatingOut队列中读取。我们可能有近300个客户。

多个客户端访问同一个队列进行读取的技巧是使用消息头中的correlationID。使其成为客户的独特之处,他们只会获取他们独特的信息。我们所做的是在客户端中将此correlationID设置为绑定到RatingIn的消息。然后服务器获取属性并写入它写回到RatingOut的消息。这为独特的客户端保留了独特的消息,但不需要300多个队列(考虑到我们的应用服务器管理员数量,这将很快在我们公司无法管理)。

我认为它更多地与发布方法有关。如果您希望发布仅针对一个消费者的消息,请使用队列。如果您希望发布针对多个消费者的消息,但不生成大量消息(并且您可能也不知道您需要发布多少消费者),那么请使用主题。