在消息队列系统中,消息优先级本质上是不重要的吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

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

一个优先级队列基于与优先级的约束范围中的任意字段中字的非消息感命令其内容。为什么像这样的实现不作为消息传递系统的一部分存在?正如我在标题中提到的那样,优先是一种固有的非消息传递概念?

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

提问于
用户回答回答于

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

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

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

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

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

用户回答回答于

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

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

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

扫码关注云+社区