Wie kann ein RabbitMQ-Client sagen, wenn es verliert die Verbindung zum server?
Wenn ich bin immer in Verbindung zu RabbitMQ und das warten auf Ereignisse mit einem EventingBasicConsumer, wie kann ich feststellen, ob ich schon vom server getrennt?
Ich weiß, es ist ein Shutdown-event, aber es hat nicht Feuer, wenn ich ziehen Sie meine Netzwerk-Kabel simulieren einen Ausfall.
Ich habe auch versucht die ModelShutdown Ereignis, und CallbackException auf dem Modell, aber keiner scheint zu funktionieren.
BEARBEITEN-----
Die, die ich als "Antwort" gekennzeichnet ist korrekt, aber es wurde nur ein Teil der Lösung für mich. Es gibt auch die HeartBeat-Funktionalität integriert RabbitMQ. Den server gibt es in der Konfigurationsdatei. Es wird standardmäßig auf 10 Minuten, aber natürlich können Sie das ändern.
Kann der AUFTRAGGEBER auch verlangen, ein anderes Intervall für den heartbeat von der Einstellung der RequestedHeartbeat Wert auf die ConnectionFactory-Instanz.
- Sie können einen Herzschlag, um die Verbindung, die erkennt, service werden kann
- Können Sie Ihre ganze code? Ich stehe vor demselben Problem. Vielen Dank im Voraus.
- Sie wirklich brauchen 3 Dinge. 1 die ConnectionFactory braucht eine RequestedHeartBeat. 2. nachdem Sie eine Verbindung erstellen, definieren Sie die ConnectionShutdown Ereignis, wie beschrieben, in die markierte Antwort. 3 stellen Sie sicher, Sie haben es richtig eingestellt in der config-Datei rabbitmq. (sorry, ich habe nicht das Teil rund derzeit.) Ich werde sehen, ob ich kann extrahieren Sie den code, ohne auf die Implementierung der spezifische Sachen.
- Ich postete ein Beispiel als Antwort unten, dass ich hoffe, dass hilft.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vermute, dass Sie über die c# - Bibliothek? (aber auch so ich denke die anderen haben ähnliche Veranstaltung).
Können Sie Folgendes tun:
Dies ist ein Beispiel, aber die markierte Antwort ist, was dazu führen mich zu diesem.
Ein paar Dinge zu beachten, über diese.
Ich bin mit # für das Thema. Dieser schnappt sich alles. In der Regel will man die Grenze von einem Thema.
Ich bin Einstellung, die eine variable namens "stop", um zu bestimmen, Wann der Prozess enden soll. Sie werden bemerken, läuft die Schleife ewig, bis die variable true ist.
Den Dequeue wartet 5 Sekunden und dann verlässt, ohne Daten wenn keine neue Nachricht. Dies ist, um sicherzustellen, dass wir hören, dass variable Stopp und tatsächlich irgendwann aufgehört. Ändern Sie den Wert nach Ihren wünschen.
Wenn eine Nachricht kommt, in der ich spawn das handling code in einem neuen thread. Der aktuelle thread ist reserviert für nur zu hören, die rabbitmq-Nachrichten und wenn ein handler die Verarbeitung zu lange dauert, ich will Sie nicht verlangsamen Sie die anderen Nachrichten. Können Sie oder können nicht brauchen diese je nach Implementierung. Sei aber vorsichtig, die den code schreiben, die Nachrichten verarbeiten. Wenn es dauert eine minute um zu starten und Ihre Nachricht an sub-second Zeit werden Sie laufen out-of-memory-oder zumindest in schweren performance-Probleme.