消息代理队列和消息类型
划分消息队列的标准智慧和考虑因素是什么?
假设消息数量相对较少(< 1000/天),将多种消息类型组合到一个队列中并让消费者使用选择器来过滤它们是否有意义?或者,单个队列应该只处理单个消息类型吗?
我能想到的几个可能的考虑因素:
- 至少以我对 ActiveMQ 的有限了解,看起来读/写安全性是针对每个队列的。因此,需要不同读/写权限的消息类型将需要不同的队列。
- 消息选择器似乎需要一个标准标头值(MessageType:AbcMessage)来过滤
- 队列的爆炸(> 10,> 100,> 1000?)似乎比消息的爆炸对性能的影响更大
- 单一消息类型每个队列似乎更容易编写客户端代码。只需处理队列中的每条消息即可。如果您想要不同的消息类型,请订阅不同的队列。
- ???
What's the standard wisdom and considerations for dividing up a message queue?
Assuming relatively small number of messages (< 1000/day), does it make sense to combine multiple message types into a single queue and have consumers use selectors to filter them? Or, should a single queue only handle a single message type?
A couple of possible considerations I can think of:
- At least in my limited knowledge of ActiveMQ, it looks like Read/Write security is per queue. So message types that need different Read/Write permissions would need different queues.
- Message Selectors would seem to need a standard header value (MessageType: AbcMessage) to filter on
- An explosion of queues (> 10, > 100, > 1000?) seems to impact performance more than an explosion of messages
- A single message type per queue would seem to be easier to write client code for. Just process each message on the queue. If you want a different message type, subscribe to a different queue.
- ???
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
任何给定的 MQ 系统都应该能够处理任何给定队列中的数百万条消息,我根本不会担心。
我更喜欢具有独特现实意义的队列,而不是担心选择器。我知道有真正的理由使用选择器或消费并重新排队,但我更喜欢使队列不同而不用担心选择。
Any given MQ system should be able to handle many millions of messages in any given queue, I would not be concerned at all at voume.
I prefer queues that have distinct real-world meaning rather than worrying about selectors. I know there are real reasons to use selectors or to consume and re-queue, but I prefer to make the queues distinct and not worry about selection.
由于这个问题没有得到真正解决,并且您在问题中询问了它(当我发现这个时,这是我正在寻找的东西),我想我可以插话如何在单个异构队列上过滤消息按类型。
如果您查看此处,您会发现一个用户定义的属性适用于所有名为
JMSType
的消息。这是一个String
,默认为空。当您发送消息时,让生产者将其设置为商定的值,例如map
或text
,然后在您的消费者中使用特定消息选择器取决于您想要接收的消息类型。使用相同的示例,它将是JMSType = 'map'
或JMSType = 'text'
。我能够使用 ActiveMQ 与 Java 生产者和 C++ 消费者成功使用此技术-CPP 库。
Since this wasn't really addressed and you asked about it in your question (and it was something I was searching for when I found this), I thought I could chime in on how I am able to filter messages on a single, heterogeneous queue by type.
If you look here, you will find a user-defined property is available on all messages called
JMSType
. This is aString
and is empty by default. When you are sending messages, have your producer set this to an agreed upon value, such asmap
ortext
for example, and then, in your consumer, use a particular message selector depending on what kind of message you want to receive. Using the same examples, it would beJMSType = 'map'
orJMSType = 'text'
.I was able to use this technique successfully with a Java producer and a C++ consumer using the ActiveMQ-CPP library.