我在ActiveMQ中实现了一个优先级队列。如果队列持续充满高优先级消息,则永远不会处理低优先级消息。 ActiveMQ如何处理这种情况或如何避免或处理这种情况?
答案 0 :(得分:4)
ActiveMQ并不会尝试做任何事情来阻止这种情况,因为它可以根据您的应用需求来解决它。如果您遇到这种情况,您可能需要考虑使用每个优先级的队列来允许跨队列进行负载平衡。
答案 1 :(得分:1)
扩展到Tim Bish的答案,ActiveMQ中有一些功能可以用来处理这种情况。
您可以设置虚拟目标来过滤掉高和低prio消息,例如(在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消息,但线程少于高prio消息。
您还可以使用消费者应用程序中的所选选项直接从“ALL”队列中读取消息。