Message Broker队列和MessageType

时间:2010-05-18 21:43:45

标签: message-queue activemq nservicebus messagebroker

划分消息队列的标准智慧和考虑因素是什么?

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

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

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

2 个答案:

答案 0 :(得分:1)

任何给定的MQ系统都应该能够处理任何给定队列中的数百万条消息,我根本不会关注voume。

我更喜欢具有独特现实意义的队列,而不是担心选择器。我知道有正确的理由使用选择器或消费和重新排队,但我更喜欢让队列分明,不用担心选择。

答案 1 :(得分:1)

由于这并没有真正解决,你在问题中询问过这个问题(当我发现这个问题时,这是我正在寻找的东西),我想我可以说明如何在单个信息上过滤信息,类型异构队列。

如果查看here,您会发现所有名为JMSType的邮件都可以使用用户定义的属性。这是String,默认为空。当您发送消息时,请让您的生产者将其设置为商定的值,例如maptext,然后,在您的消费者中,使用特定的消息选择器,具体取决于您想要收到的消息。使用相同的示例,它将是JMSType = 'map'JMSType = 'text'

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