我有一个应用程序正在分配一堆工人的负载。到目前为止,所有工作人员都在同一个虚拟机上运行,尚未扩展。 我的问题是,每隔3-4天,工作人员就会崩溃并显示下面的错误消息 - 客户端和rabbitmq服务器之间没有联系,在1200秒内(我猜)。
Traceback (most recent call last):
File "/var/www/vhosts/niklas/workers/builder.py", line 170, in <module>
BuildWorker().main()
File "/var/www/vhosts/niklas/lib/worker.py", line 29, in main
self.msgs.ch.start_consuming()
File "/usr/local/lib/python2.6/dist-packages/pika/adapters/blocking_connection.py", line 722, in start_consuming
self.connection.process_data_events()
File "/usr/local/lib/python2.6/dist-packages/pika/adapters/blocking_connection.py", line 93, in process_data_events
self.process_timeouts()
File "/usr/local/lib/python2.6/dist-packages/pika/adapters/blocking_connection.py", line 99, in process_timeouts
self._call_timeout_method(self._timeouts.pop(timeout_id))
File "/usr/local/lib/python2.6/dist-packages/pika/adapters/blocking_connection.py", line 164, in _call_timeout_method
timeout_value['method']()
File "/usr/local/lib/python2.6/dist-packages/pika/heartbeat.py", line 85, in send_and_check
return self._close_connection()
File "/usr/local/lib/python2.6/dist-packages/pika/heartbeat.py", line 106, in _close_connection
HeartbeatChecker._STALE_CONNECTION % duration)
File "/usr/local/lib/python2.6/dist-packages/pika/adapters/blocking_connection.py", line 75, in close
self.process_data_events()
File "/usr/local/lib/python2.6/dist-packages/pika/adapters/blocking_connection.py", line 91, in process_data_events
self._handle_timeout()
File "/usr/local/lib/python2.6/dist-packages/pika/adapters/blocking_connection.py", line 198, in _handle_timeout
self._on_connection_closed(None, True)
File "/usr/local/lib/python2.6/dist-packages/pika/adapters/blocking_connection.py", line 235, in _on_connection_closed
raise exceptions.AMQPConnectionError(*self.closing)
pika.exceptions.AMQPConnectionError: (320, 'Too Many Missed Heartbeats, No reply in 1200 seconds')
我的问题是,可能导致这种情况的原因是什么? 这只发生在三分之一的工作者中,其他工作正常,没有任何错误消息或警告(同样,所有工作人员和Rabbitmq服务器在同一个VM上)。 我在Python库pika,start_consuming()中使用标准方法来检索新请求。这里的代码很容易附加,并且考虑到错误消息,它似乎超出了我的代码或系统问题。
我正在使用:
答案 0 :(得分:2)
由于pika 0.9.8中的一个错误(#236),我们遇到了类似的问题。
https://github.com/pika/pika/pull/236
这应该在0.9.9中修复,或者可以通过在github上附加链接问题的源代码修补你的pika库来解决。
(Pika正在关闭2次累积错过的心跳,而不是连续2次)。