Jms ActiveMQ如何防止低优先级消息的饥饿?

Jms ActiveMQ如何防止低优先级消息的饥饿?,jms,activemq,priority-queue,Jms,Activemq,Priority Queue,我在ActiveMQ中实现了一个优先级队列。如果队列不断被高优先级消息淹没,低优先级消息将永远不会得到处理。ActiveMQ如何处理这种情况,或者如何避免或处理这种情况?ActiveMQ不会试图采取任何措施来防止这种情况,因为这取决于您根据应用程序的需要来解决它。如果你有这样的情况,你可能需要考虑使用每个优先级队列来允许队列间的负载平衡。p> 扩展到Tim Bish的答案,ActiveMQ中有一些功能可用于处理这种情况 您可以设置一个虚拟目的地,以过滤高优先级和低优先级消息,如下所示(在virt

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

ActiveMQ不会试图采取任何措施来防止这种情况,因为这取决于您根据应用程序的需要来解决它。如果你有这样的情况,你可能需要考虑使用每个优先级队列来允许队列间的负载平衡。p> 扩展到Tim Bish的答案,ActiveMQ中有一些功能可用于处理这种情况

您可以设置一个虚拟目的地,以过滤高优先级和低优先级消息,如下所示(在virtualDestinationInterceptor标记内)


然后,您可以遵循所介绍的备选策略。 您将一个使用者置于LOW.PRIO队列,将多个使用者置于HIGH.PRIO队列。然后将处理LOW.PRIO消息,但线程数少于high PRIO消息

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

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