【问题标题】:How does ActiveMQ prevent starvation of low priority messages?ActiveMQ 如何防止低优先级消息的饥饿?
【发布时间】:2014-11-23 18:41:14
【问题描述】:

我在 ActiveMQ 中实现了一个优先级队列。如果队列不断被高优先级的消息淹没,那么低优先级的消息将永远不会被处理。 ActiveMQ 如何处理这种情况或如何避免或处理这种情况?

【问题讨论】:

    标签: jms activemq priority-queue


    【解决方案1】:

    延伸到 Tim Bish 的回答,ActiveMQ 中有一些功能可以用来处理这种情况。

    您可以设置一个虚拟目的地来过滤掉高优先级和低优先级消息,就像这样(在 virtualDestinationInterceptor 标记内)。

    <virtualDestinations>
      <compositeQueue name="ALL">
         <forwardTo>
              <filteredDestination selector="JMSPriority &lt; 5" queue="LOW.PRIO"/>
              <filteredDestination selector="JMSPriority &gt; 4" queue="HIGH.PRIO"/>
         </forwardTo>
      </compositeQueue>
    </virtualDestinations>
    

    然后您可以遵循here 提供的替代策略。 您将一个消费者放在 LOW.PRIO 队列上,将多个消费者放在 HIGH.PRIO 队列上。然后将处理 LOW.PRIO 消息,但线程比高优先级消息少。

    您还可以在您的消费者应用程序中使用所述选择器直接从“ALL”队列中读取消息。

    【讨论】:

      【解决方案2】:

      ActiveMQ 不会尝试做任何事情来阻止这种情况,因为您可以根据应用程序的需要来解决它。如果您遇到这种情况,您可能需要考虑使用每个优先级的队列来允许跨队列进行负载平衡。

      【讨论】:

        猜你喜欢
        • 2015-02-11
        • 2011-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-01
        • 1970-01-01
        • 2014-03-13
        相关资源
        最近更新 更多