技术背景: python(3.7) + Django(2.1) + Celery(4.2) + RabbitMQ(3.7.8)
启动环境:
- django runserver 启动在本地
- celery 也是在本地系统:$ celery worker -A <project> -c 2 --loglevel=info -n 'celery_worker_name' -Q <queue> -b amqp://****:****@localhost:*56**/vhost //创建了一个新的vhost
- rabbitmq 在docker 中启动,映射本地端口。
遇到的情况:
当webserver启动时,celery都可以正常工作,但是当有3min 没有添加 celery task. 所有的webserver 都可以调用celery_task.delay(). 但是celery并没有做任何的事情。
排查时,发现rabbitmq出现报错信息:
2019-02-02 07:07:00.679 [error] <0.731.0> closing AMQP connection <0.731.0> (172.17.0.1:34362 -> 172.17.0.4:5672):
missed heartbeats from client, timeout: 60s
快速解决方案: (不靠谱)
重启webserver (这个解决方案太烂了。。不能让服务器一直重启吧。。或者一直保持有人调用吧。。。需要另寻出路)
原理待查!!!!!!
但是在搜索这个问题时,发现有小伙伴遇到同样的问题,并报bug(https://github.com/celery/celery/issues/4980)
所以需要找