Wenn ich mit RabbitMQ verbunden bin und auf Ereignisse mit einem EveningBasicConsumer lausche, wie kann ich feststellen, ob ich vom Server getrennt wurde?
Ich weiß, dass es ein Shutdown-Ereignis gibt, aber es löst nicht aus, wenn ich mein Netzwerkkabel abziehe, um einen Fehler zu simulieren.
Ich habe auch das ModelShutdown-Ereignis und CallbackException auf dem Modell versucht, aber keines scheint zu funktionieren.
BEARBEITEN ----- Der eine, den ich als Antwort markiert habe, ist richtig, aber es war nur ein Teil der Lösung für mich. Es gibt auch HeartBeat-Funktionalität in RabbitMQ integriert. Der Server gibt es in der Konfigurationsdatei an. Es ist standardmäßig 10 Minuten, aber natürlich können Sie das ändern.
Der Client kann auch ein anderes Intervall für den Heartbeat anfordern, indem er den RequestedHeartbeat-Wert für die ConnectionFactory-Instanz festlegt.
Dies ist ein Beispiel dafür, aber die deutliche Antwort führt mich dazu.
%Vor%Ein paar Dinge zu beachten.
Ich verwende # für das Thema. Das packt alles. Normalerweise möchten Sie nach einem Thema einschränken.
Ich setze eine Variable namens "stop", um zu bestimmen, wann der Prozess enden soll. Sie werden feststellen, dass die Schleife für immer ausgeführt wird, bis diese Variable wahr ist.
Der Dequeue wartet 5 Sekunden und verlässt dann ohne Daten zu erhalten, wenn keine neue Nachricht vorhanden ist. Dies ist, um sicherzustellen, dass wir auf diese Stoppvariable achten und tatsächlich irgendwann aufhören. Ändern Sie den Wert nach Ihren Wünschen.
Wenn eine Nachricht eingeht, spawne ich den Bearbeitungscode in einem neuen Thread. Der aktuelle Thread wird reserviert, um nur die rabbitmq-Nachrichten abhören zu können. Wenn ein Handler zu lange braucht, um ihn zu verarbeiten, möchte ich nicht, dass er die anderen Nachrichten verlangsamt. Je nach Implementierung können Sie dies benötigen oder nicht. Seien Sie vorsichtig, schreiben Sie jedoch den Code, um mit den Nachrichten umzugehen. Wenn das Ausführen einer Minute und das Abrufen von Nachrichten in Sekundenbruchteilen erforderlich ist, ist der Arbeitsspeicher erschöpft oder es treten nur noch schwerwiegende Leistungsprobleme auf.
Tags und Links rabbitmq