Verbindung geschlossen rabbitmq aus irgendeinem Grund nach einiger Zeit
Bin ich mit pika-python-Bibliothek, um eine Verbindung zu rabbitmq-server auf localhost.
class BaseRabbitSender(MessageSender):
__metaclass__ = ABCMeta
def __init__(self, host):
self.node = BaseMessagingNode(host)
self.connection = pika.BlockingConnection(pika.ConnectionParameters(
host=host))
self.channel = self.connection.channel()
@abstractmethod
def send_message(self, message):
pass
def close_connection(self):
self.connection.close()
class DirectRabbitSender(BaseRabbitSender):
def __init__(self, host, queue_name):
super(DirectRabbitSender, self).__init__(host)
self.queue_name = queue_name
self.channel.queue_declare(queue=queue_name, durable=True)
def send_message(self, message):
self.channel.basic_publish(exchange='',
routing_key=self.queue_name,
body=message,
properties=pika.BasicProperties(
delivery_mode=2,
))
def close_connection(self):
self.connection.close()
Aus irgendeinem Grund nach einiger Zeit (wie paar Tage) bin ich immer Fehler.
File "build/bdist.linux-x86_64/egg/pika/adapters/blocking_connection.py", line 560, in basic_publish
(properties, body), False)
File "build/bdist.linux-x86_64/egg/pika/adapters/blocking_connection.py", line 1147, in _send_method
self.connection.send_method(self.channel_number, method_frame, content)
File "build/bdist.linux-x86_64/egg/pika/adapters/blocking_connection.py", line 267, in send_method
self._send_method(channel_number, method_frame, content)
File "build/bdist.linux-x86_64/egg/pika/connection.py", line 1504, in _send_method
self._send_frame(frame.Header(channel_number, length, content[0]))
File "build/bdist.linux-x86_64/egg/pika/adapters/blocking_connection.py", line 410, in _send_frame
self.process_data_events()
File "build/bdist.linux-x86_64/egg/pika/adapters/blocking_connection.py", line 236, in process_data_events
raise exceptions.ConnectionClosed()
ConnectionClosed
Rabbitmq server-log -
=INFO REPORT==== 3-Mar-2014::15:11:03 ===
accepting AMQP connection <0.26625.0> (127.0.0.1:41846 -> 127.0.0.1:5672)
=ERROR REPORT==== 3-Mar-2014::15:38:12 ===
closing AMQP connection <0.326.0> (127.0.0.1:58580 -> 127.0.0.1:5672):
{heartbeat_timeout,running}
=WARNING REPORT==== 3-Mar-2014::16:11:04 ===
closing AMQP connection <0.26625.0> (127.0.0.1:41846 -> 127.0.0.1:5672):
connection_closed_abruptly
=INFO REPORT==== 3-Mar-2014::16:11:05 ===
accepting AMQP connection <0.27016.0> (127.0.0.1:37776 -> 127.0.0.1:5672)
=ERROR REPORT==== 3-Mar-2014::17:41:05 ===
closing AMQP connection <0.27016.0> (127.0.0.1:37776 -> 127.0.0.1:5672):
{heartbeat_timeout,running}
Läuft es auf ubuntu 13.10. RabbitMQ 3.1.3
Verstehe ich nicht, was passiert ist. Können Sie das erklären?
- es ist immer eine gute Idee, nach ein paar info-Plattform, Versionen, etc.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Relevante log-Zeile: {heartbeat_timeout,ausführen}.
Etwas verhindert BlockingConnection senden Herzschläge, so RabbitMQ hält Ihr Kunde nicht erreichbar oder tot. Sie haben 3 Optionen:
Gut, das eigentliche problem war, dass ich aufgehört habe, rabbitmq-server. Und pika sich nicht mit trennt.
Hatte ich einige tests, die ich ausführen möchten. Alles ist in Ordnung, wenn ich es in meinem "localhost". Aber, wenn ich die tests in einem server, ich hatte genau das gleiche problem und situation wie diese. Ich habe meine
pika
version, es ist0.9.13
. Ich bin mitBlockingConnection
übrigens auch.Zuerst, ich versuchte zu rufen
process_data_events()
regelmäßig. Es hat nicht funktioniert.Zweitens, ich habe versucht, eine neue Verbindung zu öffnen und den Kanal, wenn ich das veröffentlichen einer Nachricht oder öffnen Sie eine neue Warteschlange. Es hat nicht funktioniert.
Drittens habe ich versucht, ein upgrade
pika
zu0.9.14
. Es hat nicht funktioniert.Jemand auf einen thread hier: https://github.com/pika/pika/issues/397 erwähnt die Möglichkeit einer
socket
bug. So, ich habe die python-version, hypothesizing, dass es vielleicht ein bug IST, und es behoben wurde in der späteren version von python. Die server, die python-version ist2.7.3
, und in meinem localhost es ist2.7.12
. Um zu testen, ob python-version ist wirklich das problem, das ich installiert conda und eine Umgebung geschaffen, die python-version2.7.3
. Ich lief die tests, und es bestanden (ich kann nicht reproduzieren Sie das Problem).Nachdem alle der oben genannten versuche, ich kam mit einer weiteren Hypothese, dass es vielleicht ein Fehler in meiner server
rabbitmq-server
. Ich verglich die Versionen: localhost es ist die neueste (3.6.5
), in meinem server, es ist2.8.4
. Um zu überprüfen, dass dies das eigentliche problem, lief ich in den tests, aber ich habe eine remote-rabbitmq mit einer späteren version. Alles hat gut funktioniert. So, ich habe ein Upgrade derrabbitmq-server
und siehe da, das problem verschwindet!TL;DR:
Die Lösung ist ein upgrade Ihres
rabbitmq-server
!