2016-05-09 20 views
0

Ich versuche, sinnvollen Code zu erstellen, wenn RabbitMQ beginnt, Verbindungen zu blockieren, aufgrund von Datenträger-Level oder Speicher-Wasserzeichenalarm.RabbitMQ PHP-Treiber (AMQP): blockierte Verbindungen

Es gibt eine Möglichkeit, Handler für Benachrichtigungen über das Setzen der Verbindung in den gesperrten Modus hinzuzufügen.

Es scheint jedoch, dass diese Benachrichtigung nur gesendet wird, wenn ich versuche, die Verbindung zu schließen.

So

$this->channel->basic_publish($msg, $this->exchangeName, $route); 

läuft erfolgreich ausführt, Handler erhält keine Benachrichtigung über blockierte Verbindung.

Zur gleichen Zeit wird keine Nachricht zur Warteschlange hinzugefügt - ich kann es aus dem Dashboard sagen.

Aber wenn ich versuche Verbindung zu schließen ausdrücklich:

$this->channel->close(); 

oder implizit (durch nur lassen Skript zu beenden, AMQP Objekt destructor erledigt den Rest) I erhalten eine Benachrichtigung, dass der Kanal gesperrt ist und danach Skript nur friert Soweit ich es verstehe, wartet es auf einige Daten, um die Methode close_ok zu beenden.

Also die Frage ist, wie man Informationen über blockierte Kanal zum Zeitpunkt (oder kurz nach) der Veröffentlichung erhalten? Und wie lässt sich vermeiden, dass das Skript für blockierte Verbindungen auf ewig wartet?

Vielen Dank im Voraus.

Antwort

0

OK, es sieht so aus, als hätte ich eine Antwort.

RabbitMQ sendet Benachrichtigungen an aktiv Verbindungen.

Also, wenn ich versuche, eine Verbindung zum Server zu erstellen, die Speicher- oder Datenträgerprobleme auftreten, helfen diese Benachrichtigungen überhaupt nicht.

Aber wenn Verbindung aktiv ist, dann Benachrichtigung über Blockierung ankommen, nachdem ich versuche, Nachricht zu veröffentlichen, wie es sein sollte.

Jetzt muss ich nur herausfinden, wie erkannt wird, dass auf dem Server beim Erstellen einer neuen Verbindung Probleme auftreten. Aber das ist eine andere Frage.