【发布时间】:2014-11-23 18:41:14
【问题描述】:
我在 ActiveMQ 中实现了一个优先级队列。如果队列不断被高优先级的消息淹没,那么低优先级的消息将永远不会被处理。 ActiveMQ 如何处理这种情况或如何避免或处理这种情况?
【问题讨论】:
标签: jms activemq priority-queue
我在 ActiveMQ 中实现了一个优先级队列。如果队列不断被高优先级的消息淹没,那么低优先级的消息将永远不会被处理。 ActiveMQ 如何处理这种情况或如何避免或处理这种情况?
【问题讨论】:
标签: jms activemq priority-queue
延伸到 Tim Bish 的回答,ActiveMQ 中有一些功能可以用来处理这种情况。
您可以设置一个虚拟目的地来过滤掉高优先级和低优先级消息,就像这样(在 virtualDestinationInterceptor 标记内)。
<virtualDestinations>
<compositeQueue name="ALL">
<forwardTo>
<filteredDestination selector="JMSPriority < 5" queue="LOW.PRIO"/>
<filteredDestination selector="JMSPriority > 4" queue="HIGH.PRIO"/>
</forwardTo>
</compositeQueue>
</virtualDestinations>
然后您可以遵循here 提供的替代策略。 您将一个消费者放在 LOW.PRIO 队列上,将多个消费者放在 HIGH.PRIO 队列上。然后将处理 LOW.PRIO 消息,但线程比高优先级消息少。
您还可以在您的消费者应用程序中使用所述选择器直接从“ALL”队列中读取消息。
【讨论】:
ActiveMQ 不会尝试做任何事情来阻止这种情况,因为您可以根据应用程序的需要来解决它。如果您遇到这种情况,您可能需要考虑使用每个优先级的队列来允许跨队列进行负载平衡。
【讨论】: