2014-09-29 83 views

回答

4

ActiveMQ不会尝试做任何事情来防止这种情况,因为它取决于您根据您的应用程序的需求来解决它。如果您遇到这种情况,您可能需要考虑使用每个优先级的队列来实现队列间的负载平衡。

1

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

您可以设置一个虚拟目标来过滤掉高位和低位的prio消息,就像这样(在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。 您将一个使用者放在HIGH.PRIO队列中的LOW.PRIO队列和多个使用者身上。然后LOW.PRIO消息将被处理,但线程数少于高级prio消息。

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