当我们设计应用程序时如何选择Topic/Queue类型实现。
我知道,
a) 如果多个消费者使用该消息,则使用 Topic
b) 如果只有一个消费者则使用Queue
请提供更多需要考虑的要点?
例如并发、消息持久化、负载均衡等等?
谢谢。
RW
最佳答案
如果只有一个消费者使用队列,情况并不完全正确。
我们有一个 Java EE 应用程序,我们可以在其中对保险报价进行评级。我们有一个RatingIn 队列和一个RatingOut 队列。我们所有的客户端都会写入RatingIn 队列并从RatingOut 队列中读取。我们可能有近 300 多个客户。
多个客户端访问同一队列进行读取的技巧是使用消息头中的correlationID。让它对客户来说是独一无二的,他们只会收到他们独特的信息。我们所做的就是在客户端中将这个correlationID 设置为绑定(bind)到RatingIn 的消息。然后,服务器获取该属性并写入消息,并将其写回到RatingOut。这可以为唯一的客户端保留唯一的消息,但不需要 300 多个队列(考虑到我们公司的应用服务器管理员数量,这很快就会变得难以管理)。
我认为这更多的是与发布方式有关。如果您希望发布一条仅针对一个消费者的消息,请使用队列。如果您希望发布一条针对多个消费者的消息,但又不想生成大量消息(并且您可能也不知道必须为多少个消费者发布消息),那么请使用主题。
关于java - 如何选择主题与队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9529220/