2016-10-10 9 views
0

Я ищу правильный способ отправить все сообщения в очередь мертвой буквы после определенного количества попыток.ActiveMQ Конфигурация по умолчанию RedeliveryPolicy.maximumRedeliveries для всех подключений

Поскольку redeliveryPlugin работает только с локальным хранилищем и, таким образом, нарушает нашу конфигурацию HA на основе JDBC, мы решили запустить все сообщения в DLQ.

individualDeadLetterStrategy конфигурация назначения пригождается здесь:

<destinationPolicy> 
     <policyMap> 
      <policyEntries> 
       <policyEntry topic=">" > 
        <deadLetterStrategy> 
         <individualDeadLetterStrategy 
           queuePrefix="DLQ." 
           useQueueForQueueMessages="true" /> 
        </deadLetterStrategy> 
       </policyEntry> 
       <policyEntry queue=">" > 
        <deadLetterStrategy> 
         <individualDeadLetterStrategy 
           queuePrefix="DLQ." 
           useQueueForQueueMessages="true" /> 
        </deadLetterStrategy> 
       </policyEntry> 
      </policyEntries> 
     </policyMap> 
    </destinationPolicy> 

С помощью этой опции и настройки maximumRetries в связи URI (jms.redeliveryPolicy.maximumRedeliveries=4) или в коде, я могу настроить систему достаточно хорошо.

Тем не менее, я хотел бы настроить параметры по умолчанию для всех подключений, чтобы обеспечить соблюдение стандарта по всем приложениям в брокере. Индивидуальные настройки приложения могут отличаться, но, как я вижу в настоящее время, я не могу настроить значение по умолчанию в XML - или есть способ?

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

<plugins> 
     <redeliveryPlugin fallbackToDeadLetter="true" sendToDlqIfMaxRetriesExceeded="true"> 
      <redeliveryPolicyMap> 
       <redeliveryPolicyMap> 
        <defaultEntry> 
         <redeliveryPolicy maximumRedeliveries="0" initialRedeliveryDelay="1001" redeliveryDelay="1001" /> 
        </defaultEntry> 
       </redeliveryPolicyMap>     
      </redeliveryPolicyMap> 
     </redeliveryPlugin> 
    </plugins> 
+0

Почему вы говорите **, что это, кажется, работает только для определенных очередей **. Эта конфигурация работает для всех пунктов назначения. –

+0

Нет, на самом деле, конфигурация плагина на redeliveryPlugin не влияет на максимальное значение Redeliveries redeliveryPolicy. Если я поставлю параметр 'jms.redeliveryPolicy.maximumRedeliveries' в URI брокера, я вижу разницу. Конфигурация плагина Redelivery не имеет замечательного эффекта. – thst

+0

У вас включена поддержка планировщика брокера? См. Последнюю строку здесь: http://activemq.apache.org/message-redelivery-and-dlq-handling.html –

ответ

0

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

У вас есть только выбор, чтобы удалить defaultEntry и попробуйте добавить только одну очередь в очередь, чтобы отправлять темы, не возвращенные в DLQ.

у вас есть, конечно, в журналах некоторые вещи, как этот cursor got duplicate send...Duplicate message add attempt rejected. Destination...

+0

Привет, спасибо за ответ, но это пропустило точку. Я хотел знать, если есть способ глобально установить значения по умолчанию для RedeliveryPolicy (а не RedeliveryPlugin) брокера. В настоящее время вы можете установить политику только в URI или в коде. Я не хочу использовать плагин redelivery, потому что он использует schedulerDB и хранилища schedulerDB в локальном файле (KahaDB) независимо от настроенного JDBC или уровня DDD. Это подрывает настройки HA, поскольку подчиненный планировщик не доставляет сообщения. – thst

+0

, где вы нашли эту информацию ** Я не хочу использовать плагин redelivery, потому что он использует schedulerDB и хранилище schedulerDB в локальном файле (KahaDB) независимо от настроенного JDBC или уровня DDD.** RedeliveryPlugin делает только доставку и не сохраняет сообщения, как я знаю. –

+0

документировано на сайте ActiveMQ, и есть проблемы, описывающие его. Вы также можете увидеть его на странице конфигурации leveldb. Нет документации по безопасному отказоустойчивости HA с хранилищем schedulerDB и jdbc. см. http://activemq.apache.org/replicated-leveldb-store.html и https://issues.apache.org/jira/browse/AMQ-5238 – thst

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

  • Нет связанных вопросов^_^