消息队列系统中消息的优先级固有地不重要吗?

看来我所看到的大多数消息系统都具有基本的(如果有的话)对优先级消息队列的支持。 例如,AMQP只规定了至少2个优先级。 RabbitMQ是一种AMQP实施,不支持任何优先事项。 ActiveMQ将在几天内获得版本5.4中10个消息优先级的支持。 JMS规范指定了10个优先级。

单词的非消息传递意义上的优先级队列基于具有不受限制的优先级范围的任意字段对其内容进行排序。 为什么像这样的实现不作为消息传递系统的一部分存在? 正如我在标题中提到的那样,优先是一种固有的非消息传递概念?

我意识到,一个答案可能是优先级概念引入消息在队列中无限衰落的可能性,同时处理更高优先级的消息。 还有其他原因吗?


通常,消息队列系统用于确保在不同系统之间传递消息。

通常情况下,会有某种一次又一次的保证,并且通常会进一步保证消息将按顺序排列。

总的来说,这会通知您正在构建和连接在一起的系统的设计。

解耦系统之间的优先级概念通常没有多大意义。

也就是说,一个常见的解决方法是有两个队列,一个高优先级和一个后台优先级。 然而,固有的问题然后被弄清楚了,因为当更高优先级的请求进入时,接收系统当然可能不能停止处理低级请求,所以它们通常在该粒度级上顺序地进行。


BTW ActiveMQ现在通过JMSPriority头支持5.4.x中的优先消息。

消息代理在到达某个缓冲区时不会让消息代理重新排序消息,而是通常有更好的技术来实现优先级消耗,例如为高优先级消息设置专用的消费者池。 然后,无论低优先级消息有多少噪声,高优先级消息总是会通过。

鉴于消息的异步特性,如果使用诸如JMSPriority头等的东西,它很容易填充缓冲区,网络管道和预取队列以及低优先级消息。


在我看来,这个想法可能与优先级队列中的优先级值更类似于“进程优先级”。 当然,这与JMS规范中的一两句一致,显然也与AMQP规范一致。

链接地址: http://www.djcxy.com/p/34063.html

上一篇: Is message priority inherently unimportant in message queue systems?

下一篇: JMS message re