使用 celery 處理定時(shí)任務(wù)和異步任務(wù)的時(shí)候,出現(xiàn)與 rabbitmq 連接中斷的問(wèn)題。具體異常如下:
[2018-09-27 15:37:59,466: ERROR/MainProcess] Control command error: error(32, 'Broken pipe')
Traceback (most recent call last):
File "/Users/xxx/.virtualenvs/engine_env/lib/python2.7/site-packages/celery/worker/pidbox.py", line 46, in on_message
self.node.handle_message(body, message)
File "/Users/xxx/.virtualenvs/engine_env/lib/python2.7/site-packages/kombu/pidbox.py", line 129, in handle_message
return self.dispatch(**body)
File "/Users/xxx/.virtualenvs/engine_env/lib/python2.7/site-packages/kombu/pidbox.py", line 112, in dispatch
ticket=ticket)
File "/Users/xxx/.virtualenvs/engine_env/lib/python2.7/site-packages/kombu/pidbox.py", line 135, in reply
serializer=self.mailbox.serializer)
File "/Users/xxx/.virtualenvs/engine_env/lib/python2.7/site-packages/kombu/pidbox.py", line 265, in _publish_reply
**opts
File "/Users/xx/.virtualenvs/engine_env/lib/python2.7/site-packages/kombu/messaging.py", line 181, in publish
exchange_name, declare,
File "/Users/xxx/.virtualenvs/engine_env/lib/python2.7/site-packages/kombu/messaging.py", line 203, in _publish
mandatory=mandatory, immediate=immediate,
File "/Users/xxx/.virtualenvs/engine_env/lib/python2.7/site-packages/amqp/channel.py", line 1732, in _basic_publish
(0, exchange, routing_key, mandatory, immediate), msg
File "/Users/xxx/.virtualenvs/engine_env/lib/python2.7/site-packages/amqp/abstract_channel.py", line 50, in send_method
conn.frame_writer(1, self.channel_id, sig, args, content)
File "/Users/xxx/.virtualenvs/engine_env/lib/python2.7/site-packages/amqp/method_framing.py", line 166, in write_frame
write(view[:offset])
File "/Users/xxx/.virtualenvs/engine_env/lib/python2.7/site-packages/amqp/transport.py", line 275, in write
self._write(s)
File "/usr/local/Cellar/python@2/2.7.15_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
error: [Errno 32] Broken pipe
查看對(duì)應(yīng)的 rabbitmq 的日志時(shí),如下:
2018-09-27 08:33:00.118 [warning] <0.24461.0> closing AMQP connection <0.24461.0> (172.17.0.1:48858 -> 172.17.0.4:5672):
missed heartbeats from client, timeout: 60s
在 celery 的 issue 中找到一些類似的描述,應(yīng)該是 celery 內(nèi)部的一個(gè) bug.
但是沒(méi)有具體的處理方案。
在 sf 上有個(gè)基本的處理方案:
在 celery 的配置中加上 如下配置:
broker_pool_limit = None
問(wèn)題: connection-reset-by-peer