Вопрос

Как установить Redeliverypolicy в ActiveMQ на очередь?

1) В документе см.: ActiveMQ Redeliaily, объясните, что вы должны установить его на ConnectionFactory или Connection. Но я хочу использовать разные значения для разных очередей.

2) Кроме того, я, кажется, не заставляю это работать. Установка его на заводе подключения весной (я использую ActiveMQ 5.4.2. С пружиной 3.0), как это, кажется, не оказывает никакого эффекта:

<amq:connectionFactory id="amqConnectionFactory" brokerURL="${jms.factory.url}" >
    <amq:properties>
        <amq:redeliveryPolicy maximumRedeliveries="6" initialRedeliveryDelay="15000" useExponentialBackOff="true" backOffMultiplier="5"/>
    </amq:properties>
</amq:connectionFactory>

Я также попытался установить его как свойство в определенной очереди, но это также, кажется, игнорируется, когда перераспределение появляется раньше, чем определенные значения:

<amq:queue id="jmsQueueDeclarationSnd"  physicalName="${jms.queue.declaration.snd}" >
    <amq:properties>
        <amq:redeliveryPolicy maximumRedeliveries="6" initialRedeliveryDelay="15000" useExponentialBackOff="true" backOffMultiplier="5"/>
    </amq:properties>
</amq:queue>

Спасибо

Это было полезно?

Решение 2

Я получил его, установив его на фабрике, как это сделано выше, но только при создании фабрики соединения в качестве пружинного боба, а не через XBEAN, как показано выше. Это потому, что XSD не позволяет вам установить Redeliverypolicy как объект, а просто как строка. После установки уровня кэша для потребителя в Spring's DefaultMessageListenerContainer все это сработало.

В очереди кажется, что вы просто можете установить политику доставки ... странно, так как я хотел бы иметь разные настройки для разных тем/тем. Только представьте, что у вас есть медленная и более высокая очередь или внешняя система, к которой вы подключаетесь, которая требует больше времени для восстановления ... возможно, эта функция еще предстоит реализовать

Другие советы

Я тоже использовал метод, показанный Иваном выше для AMQ: ConnectionFactory

При обновлении до ActiveMQ 5.7.0 я заметил, что это больше не работает (поскольку реализация https://issues.apache.org/jira/browse/amq-3224) В любом случае, после прочтения лучшего поста на форумах ActiveMQ, которые я сейчас использую:-

<amq:queue id="emailQueue" physicalName="emailQueue" />
<amq:queue id="smsQueue" physicalName="smsQueue" />

<!-- Wait 15 seconds first re-delivery, then 45, 135, 405, 1215, 3645 seconds -->
<bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
    <property name="backOffMultiplier" value="3" />
    <property name="initialRedeliveryDelay" value="15000" />
    <property name="maximumRedeliveries" value="6" />
    <property name="queue" value="*" />
    <property name="redeliveryDelay" value="15000" />
    <property name="useExponentialBackOff" value="true" />
</bean>

<amq:connectionFactory id="jmsFactory" brokerURL="yourProtocol/BrokerURL">
    <property name="redeliveryPolicy" ref="redeliveryPolicy" />
</amq:connectionFactory>

Обратите внимание, что для любых сообщений, которые не могут быть переоборудованы после 6 повторений, ActiveMQ создаст dlq.emailqueue 'или dlq.smsqueue и включить сообщение об этой очереди (вытащив его из исходной очереди).

Вы можете установить redeliveryPolicy внутри amq Пространство имен как это:

<amq:connectionFactory id="jmsRedeliverConnectionFactory" brokerURL="vm://localhost">
  <amq:redeliveryPolicy>
    <amq:redeliveryPolicy maximumRedeliveries="5" initialRedeliveryDelay="1000" useExponentialBackOff="true" backOffMultiplier="5" />
  </amq:redeliveryPolicy>
</amq:connectionFactory>

Я не мог получить ActiveMQ (5.7.0), чтобы распознать мою политику переоборудования, когда я определил ее, используя <amq:properties> На ConnectionFactory или в очереди (он продолжал использовать политику переоборудования по умолчанию). Что сработало для меня, так это следующее:

  • Создайте Redeliverypolicy в качестве отдельного боба, а затем снимайте его в подключении кфактори
  • Создайте явную DLQ и Spring Reference IT в Redeliverypolicy

Конфигурация пружины следующим образом:

<amq:connectionFactory id="jmsFactory" brokerURL="vm://localhost" redeliveryPolicy="#activeMQRedeliveryPolicy" />

<amq:redeliveryPolicy id="activeMQRedeliveryPolicy" destination="#myDLQ" useExponentialBackOff="true" backOffMultiplier="3" maximumRedeliveries="4" />

<amq:queue id="myDLQ" physicalName="DLQ.myDLQ" />
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top