我看过的大多数消息传递系统似乎都有对优先级消息队列的基本支持。例如,AMQP仅specifies至少2个优先级。RabbitMQ,一个AMQP的实现,doesn't support任何优先级。在5.4版本中,ActiveMQ将在几天内为10个消息优先级提供getting support。10优先级是由JMS spec指定的。
非消息意义上的priority queue基于任意字段对其内容进行排序,该字段具有不受限制的优先级范围。为什么这样的实现不能作为消息传递系统的一部分?正如我在标题中所问的,优先级本质上是一个非消息传递的概念吗?
我意识到,一个答案可能是,优先级的概念引入了消息在处理较高优先级消息时在队列中无限延迟的可能性。还有其他原因吗?
发布于 2011-02-10 00:28:55
顺便说一句,ActiveMQ现在通过JMSPriority标头支持5.4.x中的priority messaging。
通常有更好的技术来实现优先级消耗,而不是让message broker在消息到达时对某些缓冲区中的消息进行重新排序,例如having a dedicated consumer pool for high priority messages。那么,不管来自低优先级消息的噪声有多大,高优先级消息总是会被通过。
考虑到消息传递的异步特性,如果使用JMSPriority报头等,则很容易用低优先级消息填充缓冲区、网络管道和prefetch queues。
发布于 2010-12-05 07:19:15
在我看来,这个想法可能更类似于“进程优先级”,而不是优先级队列中的优先级值。当然,这与JMS规范中关于它的一两句话是一致的,显然也与AMQP规范一致。
发布于 2010-12-18 06:59:43
人们必须小心,因为太多的优先级没有用到使用程序变得比浏览每条消息更繁重的程度。
https://stackoverflow.com/questions/3465675
复制相似问题