Neustart eines SimpleMessageListenerContainer

8

Ich versuche eine Verbindung mit einem RabbitMQ mit Springboot herzustellen. Die Verbindung sollte die Verbindung immer neu starten / versuchen. Ich habe ein Problem, die Verbindung nach einer schwerwiegenden Ausnahme wieder herzustellen. Die Anwendung kann niemals eine Verbindung verlieren und nicht unbegrenzt versuchen, eine Verbindung herzustellen.

%Vor%

Ich kann eine fatal Exception bekommen, die ich in einem ApplicationListener<ListenerContainerConsumerFailedEvent> erhalte. Diese Ausnahme ist nicht immer die gleiche, das letzte Mal war es eine 'PossibleAuthenticationFailureException'

Wenn die Ausnahme fatal ist, höre ich auf und starte dann den Container. Mir ist klar, dass dies der falsche Ort ist, da es so aussieht, als ob der Container nach dem Aufruf des Events gestoppt wird.

%Vor%

ergibt die folgende Ausgabe und keine Verbindung zum Hasen. (Nach der folgenden Ausgabe folgt nichts, es tut einfach nichts ist nicht verbunden)

  

[rContainer # 0-34] startConnectionOnFatalConnectionListener: gestarteter Container.

     

[rContainer # 0-34] o.s.a.r.l.SimpleMessageListenerContainer: Container von abgebrochenem Consumer stoppen

Versionen:

  • RabbitMQ 3.6.8, Erlang 19.2
  • Federintegration (spring-integration-amqp): 4.3.9

Ich konnte mehr Protokolleinträge abrufen, die folgenden Zeilen werden protokolliert, bevor das ListenerContainerConsumerFailedEvent aufgerufen wird:

%Vor%

Workaround: Implementieren Sie eine Zustandsprüfung. Der Health Check überprüft, ob die Verbindung zu rabbitMQ besteht. Die Anwendung wird neu gestartet, wenn die Integritätsprüfung nicht erfolgreich ist. (Implementiert als Cron, der Bash-Skripte aufruft. Die Bash-Skripte stoppen und starten den Container).

    
Florian 03.05.2017, 09:15
quelle

0 Antworten