2016-08-29 1 views
0

Ich benutze Spring Boot mit Spring-amqp und Annotation-basierte Listener, um Nachricht von einem Rabbitmq-Broker zu konsumieren. Ich habe eine Federkomponente, die eine Methode wie folgt enthält:Was ist der richtige Ausnahmetyp für NACK eine Nachricht mit Annotation-basierten Listener in Spring-Boot mit amqp?

@RabbitListener(queues = "tasks") 
    public void receiveMessage(@Payload Task task) {...} 

Ich bin der AUTO-Modus verwenden, um Nachrichten nach erfolgreicher Ausführung von receiveMessage (...) zu bestätigen. Wenn ich einen speziellen Fehler feststelle, werfe ich AmqpRejectAndDontRequeueException aus, um diese Nachricht in eine konfigurierte Dead-Letter-Warteschlange zu bekommen. Jetzt muss ich nur noch eine Nachricht finden, so dass die Nachricht in die Hauptwarteschlange von rabbitmq zurückübertragen wird und ein anderer Verbraucher die Möglichkeit hat, wieder an dieser Nachricht zu arbeiten.

Welche Ausnahme sollte ich dafür werfen? Ich möchte nicht channel.basicNack (...) wie hier beschrieben (http://docs.spring.io/spring-integration/reference/html/amqp.html) verwenden, wenn möglich.

Antwort

1

Solange defaultRequeueRejectedtrue (Standard) in der Container-Factory ist, wird das Auslösen einer Ausnahme, die nicht AmqpRejectAndDontRequeueException ist, dazu führen, dass die Nachricht zurückgewiesen und erneut gestartet wird.

Die Ausnahme darf in ihrer Cause-Kette keine AmqpRejectAndDontRequeueException haben (der Container durchläuft die Ursachen, um sicherzustellen, dass es keine solche Ausnahme gibt).

Verwandte Themen