2016-09-01 1 views
3

Ich habe versucht, einen Weg zu finden, einen Wiederholungsmechanismus auf alle @RabbitListener einzustellen. Ich habe bereits mit den Eigenschaften versucht:Retry Konfiguration für @RabbitListener programmatisch angeben Warteschlange für nicht zustellbare Nachrichten

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 

Und es funktioniert gut mit dem einzigen Problem, dass kein Fehler mit der Meldung gesendet wird. Das einzige Problem, das ich habe, ist, dass, um die Nachrichten an eine bestimmte DLQ senden muss ich meine Warteschlangen ändern, um die Argumente x-dead-letter-exchange und x-dead-letter-routing-key hinzuzufügen, und das ist etwas, das ich gerne vermeiden würde.

Also meine Fragen sind:

  1. Gibt es eine Möglichkeit programmatisch festlegen, welche die DLQ ist, wo die Nachrichten die Versuche nach erschöpfen, ohne neu zu erstellen, die Warteschlangen gehen sollten? nicht mit Argumenten x-dead -...

ich mit Spring-Boot 1.4.0.RELEASE.

Antwort

3

Nicht über Eigenschaften.

Sie haben den Hörer Container Fabrik Rat Kette mit Ihrem eigenen Wiederholungs Interceptor außer Kraft zu setzen - mit einem RetryInterceptorBuilder gebaut - statt

builder.recoverer(new RejectAndDontRequeueRecoverer()); 

Injizieren Sie eine injizieren müssen entsprechend RepublishMessageRecoverer konfiguriert - sowie Veröffentlichung auf ein Austausch Ihrer Wahl, es fügt zusätzliche Informationen (Stack-Trace usw.) zu den Nachrichten-Headern.

Siehe SimpleRabbitListenerContainerFactoryConfigurer, um zu sehen, wie der Standardinterceptor built from the properties ist.

Der Wiederveröffentlichungswiederhersteller wird in this section of the Spring AMQP docs diskutiert.

Verwandte Themen