代码之家  ›  专栏  ›  技术社区  ›  Edward Dale

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

  •  18
  • Edward Dale  · 技术社区  · 14 年前

    我看过的大多数消息传递系统似乎都支持优先级消息队列(如果有的话)。例如,仅AMQP specifies 至少2个优先级。rabbitmq,AMQP实现, doesn't support 任何优先事项。ActiveMQ将 getting support 对于5.4版中的10个消息优先级,在几天内。10个优先级由 JMS spec .

    priority queue 在非消息传递的意义上,单词的内容是基于具有不受约束的优先级范围的任意字段来排序的。为什么像这样的实现不作为消息传递系统的一部分存在?正如我在标题中所问的,优先级是一个固有的非消息传递概念吗?

    我认识到一个答案可能是优先级的概念引入了消息在处理高优先级消息时无限地在队列中散播的可能性。还有其他原因吗?

    5 回复  |  直到 6 年前
        1
  •  5
  •   sdg    14 年前

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

    通常,有一种一次性的保证,而且通常还有一种进一步的保证,即消息将按顺序发送。

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

    分离系统之间的优先级概念通常没有那么多意义。

    也就是说,一个常见的解决方法是拥有两个队列,一个高优先级和一个后台优先级。然而,这一固有的问题就被澄清了,因为当然,当接收系统 高优先级 请求进入,所以它们通常是在该粒度级别上按顺序完成的。

        2
  •  7
  •   James Strachan    13 年前

    顺便说一句 ActiveMQ 现在支持 priority messaging 在5.4.x中,通过jmspriority头文件。

    通常,有更好的技术来实现优先级消耗,例如 having a dedicated consumer pool for high priority messages . 然后,不管低优先级消息有多大的噪声,高优先级消息总是会通过。

    考虑到消息传递的异步性,它很容易填充缓冲区、网络管道和 prefetch queues 如果使用JMSPriority头等,则使用低优先级消息。

        3
  •  1
  •   SamB som-snytt    14 年前

    在我看来,这个想法可能更类似于“处理优先级”,而不是优先级队列中的优先级值。当然,这与JMS规范中关于它的一两句话是一致的,显然也与AMQP规范一致。

        4
  •  1
  •   user541169    14 年前

    必须小心的是,太多的优先级没有被使用到使用程序比浏览每条消息更麻烦的程度。

        5
  •  0
  •   user2687644    6 年前

    消息传递系统是为按时间顺序排列而设计和优化的。文件系统被优化用于追加文件,而不是在开始或中间插入数据。类队列的数据结构通常针对在末尾附加和从头部删除进行了优化。对于文件系统,这意味着附加到文件(添加)和附加到事务日志(删除),以及在使用消息文件后删除消息文件(删除)。

    将优先级引入处理队列可以有效地将队列转换为具有时间和优先级排序的数据结构。基本上,当涉及到使用文件存储时,它是非常次优的,因为您必须创建某种索引策略。