2016-09-01 5 views
3

Я пытался найти способ установить механизм повтора для всех @RabbitListener. Я уже пробовал со свойствами:Конфигурация повтора для @RabbitListener программно задает очередь с мертвой буквой

listener: 
    auto-startup: true 
    concurrency: 1 
    max-concurrency: 1 
    retry: 
    enabled: true 
    initial-interval: 1000 
    max-attempts: 3 
    max-interval: 10000 
    multiplier: 2 
    stateless: true 

И это работает отлично с единственной проблемой, что никакой ошибки не отправляется с сообщением. Единственная проблема, я имею в том, что для отправки сообщений на конкретный DLQ я должен изменить свои очереди, чтобы добавить аргументы x-dead-letter-exchange и x-dead-letter-routing-key, и этого я бы хотел избежать.

Так мои вопросы это:

  1. Есть ли способ программно указать, какой является DLQ, где сообщения должны идти после изнурительных попыток без повторного создания очередей? Не используя аргументы х-мертвые -...

Я использую Spring загрузки 1.4.0.RELEASE.

ответ

3

Не по свойствам.

Вы должны переопределить цепь советы Слушатель контейнерной фабрики с собственным повторных попыток перехватчик - построен с RetryInterceptorBuilder - вместо инъекций

builder.recoverer(new RejectAndDontRequeueRecoverer()); 

вам необходимо вводить соответствующим образом сконфигурирован RepublishMessageRecoverer - а также публикации на обмен по вашему выбору, он добавляет дополнительную информацию (трассировку стека и т. д.) в заголовки сообщений.

См. SimpleRabbitListenerContainerFactoryConfigurer, чтобы узнать, как перехватчик по умолчанию built from the properties.

Повторно опубликованный сборщик обсуждается в this section of the Spring AMQP docs.

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