2017-02-22 6 views
0

Wir verwenden rabbitmq für Messaging in unserem Projekt. Dies wird hauptsächlich für die Audit-Protokollierung verwendet. Wir haben versucht zu überprüfen, wie unsere App auf bestimmte Fehlerszenarien reagiert. Wenn zum Beispiel RabbitMQ ausfällt, versucht der Verbraucher ständig, eine Verbindung zu rabbitmq herzustellen und schlägt fehl. Gibt es eine Möglichkeit für den Verbraucher aufzuhören dies zu versuchen, wenn Rabbitmq ist unten? Wie kann Publisher auf ähnliche Weise aufhören, Nachrichten an die Warteschlange zu senden, wenn der Broker inaktiv ist? Ist der Leistungsschalter eine der Optionen, die wir berücksichtigen können?Spring Boot - RabbitMQ - Handle Szenario, bei dem der Broker ausfällt

Antwort

1

Sie können RetryTemplate der RabbitTemplate Bean hinzufügen.

Fügen Sie der Wiederholungsvorlage eine RecoveryCallback Implementierung hinzu, die den Fehler ignoriert (oder protokolliert).

Es wird versuchen, eine Verbindung herzustellen, aber nicht fehlschlagen.

Wenn Sie die Spring Integration layer oben auf Spring AMQP verwenden, können Sie dem ausgehenden Kanaladapter einen circuit breaker request handler advice hinzufügen.

+0

Danke @Gary Russel. Kann RetryTemplate von dem Verbraucher verwendet werden, der die Nachrichten von RabbitMQ konsumiert. Ich habe 10 Verbraucher für jede App-Instanz eingerichtet und ich sehe sie ständig versuchen, eine Verbindung zu Rabbitmq Instanz, die down ist. Gibt es eine Möglichkeit für mich, entweder retrytemplate oder circuitbreaker zu verwenden, um die Abfrage der Warteschlange zu stoppen? –

+0

Nein; Auf der Verbraucherseite können Sie die Verbindungswiederholungen über 'recoveryInterval' oder' recoveryBackOff' konfigurieren. Wenn Sie ein 'FixedBackOff' verwenden, kann es mit' maxAttempts' konfiguriert werden und es stoppt den Container automatisch nach dieser Nummer. Sie müssen die Container erneut manuell starten, wenn die Verbindung repariert ist. –

+0

Danke @Gary Russell. –

Verwandte Themen