Приоритет с activemq - PullRequest
       48

Приоритет с activemq

6 голосов
/ 13 января 2012

В настоящее время мы разрабатываем приложение с использованием JMS и activemq (5.5.1).Мы хотели бы определить более высокий приоритет для некоторых сообщений, чтобы они сначала использовались.После установки производителя и потребителя (через JMSTemplate с помощью Spring (3.1)) приоритет работает не полностью.Действительно, когда мы «выключаем» потребителя и отправляем некоторые сообщения, приоритет сохраняется, но когда мы добавляем сообщения, когда потребитель включен, сообщения принимаются в том же порядке, в котором они были отправлены.

Конфигурация довольно проста:

Приоритет был активирован в файле конфигурации activemq:

<policyEntries>
  <policyEntry queue=">" prioritizedMessages="true"/>
  ...
</policyEntries>

И QoS был включен в конфигурации шаблона производителя:

<bean id="jmsOCRTemplate" class="org.springframework.jms.core.JmsTemplate">
  <property name="connectionFactory" ref="connectionFactory" />
  <property name="defaultDestination" ref="destination_ocr" />
  <property name="explicitQosEnabled" value="true" />
</bean>

КомуЧтобы отправить сообщение с высоким приоритетом, мы просто изменим свойство приоритета шаблона на стороне производителя:

template.setPriority(9);

Есть идеи?Это нормальное поведение или есть какая-то конфигурация, о которой мы бы забыли?

Ответы [ 2 ]

7 голосов
/ 13 января 2012

Если, по моему мнению, вы ничего не пропустили, у меня была похожая проблема пару недель назад (но с TTL и QPid).

Во-первых, JMS не является строгим в этом отношении:

JMS does not require that a provider strictly implement priority ordering of messages; however, it should do its best to deliver expedited messages ahead of normal messages.

Во-вторых, ActiveMQ НЕ ДАЕТ реализовать приоритетные очереди, говорят, что это будет где-то в версии 6.x.* Итак, то, что вы видите на самом деле нормально.

В качестве обходного пути вы можете использовать шаблон Resequencer, если он соответствует вашему случаю.

http://camel.apache.org/resequencer.html

Вот еще одно обсуждение на эту тему:

http://activemq.2283324.n4.nabble.com/Priority-message-td2352179.html

0 голосов
/ 02 сентября 2015

Я знаю, что уже поздно, но эти ответы могут кому-то помочь.

Если вы хотите, чтобы ваш потребитель использовал сообщение на основе приоритета (очередь приоритета), вы можете использовать приоритет сообщения на стороне клиента.Это означает, что когда сообщения отправляются вашему потребителю (даже до того, как ваш потребитель их получает, используя предварительную выборку), они будут кэшироваться на стороне потребителя и иметь приоритет по умолчанию.Это независимо от того, используете ли вы приоритетную поддержку на стороне брокера.Это может повлиять на порядок, который вы видите на потребителя, так что имейте это в виду.

Чтобы включить его, установите следующий параметр конфигурации в URL вашего брокера, например,

tcp://0.0.0.0:61616?jms.messagePrioritySupported=true

Чтобы отключить его, tcp://0.0.0.0:61616?jms.messagePrioritySupported=false

Так что вам не требуетсяиспользуйте верблюда (если хотите избежать осложнений)

...