2014-09-29 3 views
2

Я реализовал приоритетную очередь в ActiveMQ. Если очередь постоянно заливается сообщениями с высоким приоритетом, сообщения с низким приоритетом никогда не будут обработаны. Как ActiveMQ обрабатывает такие ситуации или как эту ситуацию можно избежать или обработать?Как ActiveMQ предотвращает голодание сообщений с низким приоритетом?

ответ

4

ActiveMQ не пытается ничего сделать, чтобы предотвратить это, так как вам решать его на основе потребностей вашего приложения. Если у вас есть такая ситуация, вам может потребоваться вместо этого использовать очередь для каждого приоритета, чтобы обеспечить балансировку нагрузки между очередями.

1

Расширяясь к ответу Тима Биша, в 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, но с меньшим количеством потоков, чем сообщения с высоким приоритетом.

Вы также можете читать сообщения непосредственно из очередей «ВСЕ» с указанными селекторами в своем потребительском приложении.

Смежные вопросы