Ich probiere RabbitMQ mit this Python Bindung aus.Wie wird die Timeout-Erkennung auf einem RabbitMQ-Server festgelegt?
Eine Sache, die ich bemerkte, ist, dass, wenn ich einen Verbraucher unrein töte (emuliert ein abgestürztes Programm), der Server denkt, dass dieser Verbraucher noch dort für eine lange Zeit ist. Das hat zur Folge, dass jede zweite Nachricht ignoriert wird.
Zum Beispiel, wenn Sie einen Verbraucher 1 Mal töten und erneut verbinden, dann werden 1/2 Nachrichten ignoriert. Wenn Sie einen anderen Kunden töten, werden 2/3 Nachrichten ignoriert. Wenn Sie eine 3. töten, werden 3/4 Nachrichten ignoriert und so weiter.
Ich habe versucht, Bestätigungen zu aktivieren, aber es scheint nicht zu helfen. Die einzige Lösung, die ich gefunden habe, ist, den Server manuell zu stoppen und ihn zurückzusetzen.
Gibt es einen besseren Weg?
wie dieses Szenario
Run rabbitmq neu erstellen.
Unarchiv this library.
Laden Sie den Verbraucher und den Herausgeber here herunter. Führen Sie amqp_consumer.py zweimal aus. Führen Sie amqp_publisher.py aus, geben Sie einige Daten ein und beobachten Sie, dass es wie erwartet funktioniert. Nachrichten werden im Round-Robin-Stil empfangen.
Töten Sie einen der Verbraucherprozesse mit kill -9 oder Task-Manager.
Wenn Sie jetzt eine Nachricht veröffentlichen, gehen 50% der Nachrichten verloren.
Ich aktualisierte meine Antwort. –
Ich kann das nicht reproduzieren. Welche Version von Linux verwenden Sie? –
Gute Frage - dies ist ein kritisches Problem, wenn hinter einer Firewall oder IP Load-Balancing-Appliance ausgeführt wird, die leere Sockets nach N Sekunden löscht, weil weder RabbitMQ noch der Client jemals informiert werden, dass der Socket gegangen ist weg, bis sie es versuchen. –