Ich habe beobachtet RabbitMQ "stecken" mit unpacked Nachrichten. Die Warteschlange zeigt einen Verbraucher an, der nicht mehr existiert, und ich gehe davon aus, dass RabbitMQ weiterhin Nachrichten an diesen Verbraucher liefert. Sie zeigen sich als eine immer größer werdende Anzahl von nicht gepackten Nachrichten. Ich mache das in PHP mit php-amqplib.rabbitMQ nicht in der Lage, Herzschlag mit php-amqplib arbeiten
Ich kann das Problem durch das Töten des Verbraucherprozesses (Kontrolle-C auf der Befehlszeile) erzeugen.
Ich versuchte, einen Herzschlag von 3 Sekunden zu spezifizieren und versucht, Keep-Alive wahr und falsch. Mit Herzschlag, nicht der Verbraucher schließlich:
Exception fwrite(): send of 573 bytes failed with errno=32 Broken pipe
PhpAmqpLib\Wire\IO\StreamIO->error_handler(8, 'fwrite(): send ...',
php-amqplib/PhpAmqpLib/Wire/IO/StreamIO.php(281): fwrite(Resource id #176, '\x01\x00\x01\x00\x00\x00\x15\x00<\x00(\x00\x00\fb...', 8192)
Ausgabe # 374 beziehen könnte: https://github.com/php-amqplib/php-amqplib/issues/374
Der Verbraucher ist aus mehreren Warteschlangen raubend, aber ich glaube, sollte keine Rolle spielen.
Das Problem, das ich versuche zu lösen, ist, dass RabbitMQ weiterhin denkt, dass ein Verbraucher existiert, wenn es nicht, mit dem Ergebnis, dass RabbitMQ diese Nachrichten nirgends liefert, und sie unbestätigt bleiben. Ich bin auf der Suche nach einer Möglichkeit, diese falsche Verbindung loszuwerden, damit diese Nachrichten an einen Live-Verbraucher weitergeleitet werden können. Ich denke, dafür ist der Herzschlag da, aber ich habe es nicht zur Arbeit gebracht.
Haben Sie Auto-ack in Ihrem Verbraucher aktiviert? – cantSleepNow
Ich nicht. Ich muss in der Lage sein, via acking zu drosseln, nachdem die Arbeit der Nachricht abgeschlossen ist. –