【问题标题】:Message Broker Queues and MessageType消息代理队列和消息类型
【发布时间】:2011-02-21 03:02:14
【问题描述】:
划分消息队列的标准智慧和注意事项是什么?
假设消息数量相对较少(
我能想到的几个可能的考虑因素:
- 至少在我对 ActiveMQ 的有限了解中,看起来读/写安全性是每个队列的。因此,需要不同读/写权限的消息类型需要不同的队列。
- 消息选择器似乎需要一个标准的标头值 (MessageType: AbcMessage) 来过滤
- 队列爆炸(> 10、> 100、> 1000?)似乎比消息爆炸更能影响性能
- 每个队列的单一消息类型似乎更容易为其编写客户端代码。只需处理队列中的每条消息。如果您想要不同的消息类型,请订阅不同的队列。
- ???
【问题讨论】:
标签:
message-queue
activemq
nservicebus
messagebroker
【解决方案1】:
任何给定的 MQ 系统都应该能够处理任何给定队列中的数百万条消息,我一点也不担心。
我更喜欢具有不同现实意义的队列,而不是担心选择器。我知道有真正的理由使用选择器或消费和重新排队,但我更喜欢使队列不同,而不是担心选择。
【解决方案2】:
由于没有真正解决这个问题,并且您在问题中询问了这个问题(当我发现这个问题时我正在寻找它),我想我可以插话我如何能够过滤单个消息, 按类型排列的异构队列。
如果您查看here,您会发现用户定义的属性适用于所有名为JMSType 的消息。这是String,默认为空。当您发送消息时,让您的生产者将其设置为约定的值,例如 map 或 text,然后,在您的消费者中,根据您想要的消息类型使用特定的消息选择器收到。使用相同的示例,它将是 JMSType = 'map' 或 JMSType = 'text'。
我能够使用ActiveMQ-CPP 库成功地将这种技术与 Java 生产者和 C++ 消费者一起使用。