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

Edw*_*ale 18 messaging activemq-classic message-queue amqp rabbitmq

似乎我所看到的大多数消息传递系统都具有对优先级消息队列的基本支持(如果有的话).例如,AMQP仅指定最少2个优先级.RabbitQQ是AMQP实现,不支持任何优先级.ActiveMQ将在几天内获得5.4版中10个消息优先级的支持.10个优先级是JMS规范指定的.

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

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

Jam*_*han 7

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

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

鉴于消息传递的异步性质,如果使用JMSPriority头等内容,它很容易填充缓冲区,网络管道和具有低优先级消息的预取队列.


sdg*_*sdg 5

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

通常,存在某种一次性和一次性保证,并且通常还有一种承诺,即消息将按顺序排列.

总的来说,然后通知您正在构建和挂钩的系统的设计.

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

也就是说,一个常见的解决方法是拥有两个队列,一个是高优先级,一个是后台优先级.然后,固有的问题变得清楚,因为当更高优先级的请求进入时,接收系统当然可能无法停止处理低级请求,因此它们通常在该粒度级别上顺序完成.