2

划分消息队列的标准智慧和注意事项是什么?

假设消息数量相对较少(< 1000/天),将多种消息类型组合到一个队列中并让消费者使用选择器过滤它们是否有意义?或者,一个队列是否应该只处理一种消息类型?

我能想到的几个可能的考虑因素:

  • 至少在我对 ActiveMQ 的有限了解中,看起来读/写安全性是每个队列的。因此,需要不同读/写权限的消息类型需要不同的队列。
  • 消息选择器似乎需要一个标准的标头值(MessageType:AbcMessage)来过滤
  • 队列爆炸(> 10、> 100、> 1000?)似乎比消息爆炸更能影响性能
  • 每个队列的单一消息类型似乎更容易为其编写客户端代码。只需处理队列中的每条消息。如果您想要不同的消息类型,请订阅不同的队列。
  • ???
4

2 回答 2

1

由于这并没有真正解决,并且您在问题中询问了它(当我发现这个时我正在寻找它),我想我可以插话我如何能够过滤单个异构队列上的消息按类型。

如果你看这里,你会发现一个用户定义的属性在所有被调用的消息上都可用JMSType。这是 aString并且默认为空。当您发送消息时,让您的生产者将其设置为商定的值,例如maptext例如,然后在您的消费者中,根据您想要接收的消息类型使用特定的消息选择器。使用相同的示例,它将是JMSType = 'map'or JMSType = 'text'

我能够使用ActiveMQ-CPP库成功地将这种技术与 Java 生产者和 C++ 消费者一起使用。

于 2012-09-20T15:15:09.303 回答
1

任何给定的 MQ 系统都应该能够处理任何给定队列中的数百万条消息,我一点也不担心。

我更喜欢具有不同现实意义的队列,而不是担心选择器。我知道有真正的理由使用选择器或使用和重新排队,但我更喜欢使队列不同而不担心选择。

于 2010-10-11T16:40:04.657 回答