【解决】Django + Celery 长链接问题(一段时间后就断开) #原理待查

技术背景: 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)

所以需要找到一个靠谱的解决方案。

>> 目前靠谱解决方案:

一般都是按照http://docs.celeryproject.org/en/v4.2.1/django/first-steps-with-django.html 这个文档配置celery on django (没有使用djcelery).

在 proj/proj/celry.py 添加如下配置内容(BROKER_HEARTBEAT): (根据https://www.cloudamqp.com/docs/celery.html)

 1 from __future__ import absolute_import, unicode_literals
 2 import os
 3 from celery import Celery
 4
 5 # set the default Django settings module for the ‘celery‘ program.
 6 os.environ.setdefault(‘DJANGO_SETTINGS_MODULE‘, ‘proj.settings‘)
 7
 8 app = Celery(‘proj‘)
 9
10 # Using a string here means the worker doesn‘t have to serialize
11 # the configuration object to child processes.
12 # - namespace=‘CELERY‘ means all celery-related configuration keys
13 #   should have a `CELERY_` prefix.
14 app.config_from_object(‘django.conf:settings‘, namespace=‘CELERY‘)
15
16
17 # 添加配置
18 # 关于这个参数,可以参考 http://docs.celeryproject.org/en/v4.2.1/userguide/configuration.html
19 # ----- 添加配置 -----------
20 app.conf.update(
21     BROKER_HEARTBEAT=None
22 )
23 # ----- 新的配置 -----------
24
25
26 # Load task modules from all registered Django app configs.
27 app.autodiscover_tasks()
28
29
30 @app.task(bind=True)
31 def debug_task(self):
32     print(‘Request: {0!r}‘.format(self.request))

// 但是rabbitmq会出现一些warning

2019-02-02 07:39:21.227 [warning] <0.1333.0> closing AMQP connection <0.1333.0> (172.17.0.1:35420 -> 172.17.0.4:5672, vhost: ‘vhost‘, user: ‘****‘):
client unexpectedly closed TCP connection

>>> 目前不会在出现之前的,3min无任务即无法再发送新任务了~~现在已经10min没有任务,但是却依然可以发送任务了~~~算是一个靠谱的解决方案。稳定性还需要再查。

原文地址:https://www.cnblogs.com/shuo-yang0459/p/10348630.html

时间: 2024-11-10 01:13:33

【解决】Django + Celery 长链接问题(一段时间后就断开) #原理待查的相关文章

解决Zabbix使用一段时间后总报Zabbix Agent不可到达的问题

Zabbix使用一段时间后总是报Zabbix Agent不可到达,报错文字如下: Zabbix Server Messages: PROBLEM: Zabbix agent on Zabbix server is unreachable for 5 minutes 首先查看Zabbix Agent的日志,找到关键出错信息,日志如下: 来自:/tmp/zabbix_agentd.log mysqladmin: connect to server at 'localhost' failed    e

svn checkout 提示“由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。”解决方法

安装好之后再windows上checkout项目,一直出错:"由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败":在尝试了很多次之后找到了最后的问题所在.  在网上找的方法试过了,都无效,大致有以下出错的可能和解决方案: ①svn项目配置文件问题: 解决方法:检查重新配置svn项目中的authz.passwd.svnserve.conf ②防火墙问题:开启了防火墙 解决方法:1:关闭防火墙.2:开放3690端口 ③svn客户端:有历史数据 解决方法:清除认证数据等

Linux解决:svn: Can&#39;t connect to host &#39;*.*.*.*&#39;: 由于连接方在一段时间后没有正确答复或连接

svn服务启动了,在服务器上可以使用命令把文件检出,但是其他电脑上就无法检出,一直提示: "svn: Can't connect to host '*.*.*.*': 由于连接方在一段时间后没有正确答复或连接" 在网上找了半天说什么没有启动服务什么的,废话,没起服务玩蛋呀. 我通过检查防火墙看到3690端口根本没有对外开放,通过修改配置文件,解决问题: 修改如下: [[email protected] home]# more /etc/sysconfig/iptables # Fire

Spring Boot定时任务运行一段时间后自动关闭的解决办法

用Spring Boot默认支持的 Scheduler来运行定时任务,有时在服务器运行一段时间后会自动关闭.原因:Schedule默认是单线程运行定时任务的,即使是多个不同的定时任务,默认也是单线程运行.当线程挂掉时,定时任务也随之终止. 解决方法: 一.改为多线程执行定时任务: 加一个配置类,实现SchedulingConfigurer接口,重写configureTasks方法即可: import org.springframework.context.annotation.Configura

网站部署中遇到的问题-过一段时间后连不上服务器

问题描述: 这个情况我只针对局域网说明,我在一个局域网内用电脑A作为服务器,并部署站点site1.在这个局域网内的电脑可以正常访问site1. 可是过一段时间后无法访问site1,重新登录A后,又恢复了对site1的访问. 原因: 设置了电脑的睡眠时间. 解决方法: 将电脑A的的睡眠时间设置为"从不".设置步骤:控制面板—>电源—>更改睡眠时间.

IIS服务器运行一段时间后卡死,且无法打开网站(IIS管理无响应,必须重启电脑)

问题描述: 公司希望使用IIS配合网站显示一些订单跟进的情况并展示出来,所以我们在一台演示的Win7 Pro电脑上安装了IIS,但使用了一段时间后发现每过几天页面就无法正常访问了,而且打开IIS管理器也是一直无响应,根本无法进行IIS的重启.只有重启电脑才能解决问题. 问题参考: http://support.microsoft.com/kb/934878/zh-cn 原因:服务器上的可用非分页缓冲的池内存小于 20 兆字节 (MB) 时,会出现此问题.可用非分页缓冲的池内存小于 20 兆字节

Visual Studio 2008用过一段时间后编辑器自动提示(智能提示:Intellisense)功能失效

头痛了好几天了,我用的VS2010, 出现的问题先是输入法把ctrl+z快捷键给拦截了,导致撤销还要点编辑->撤销 主要的问题是装的插件太多,在编辑xaml界面里面不提示了,参考下面的方案解决了, 是重新修复安装Visual Studio,在VS的Common7/IDE输入命令解决的, 原文连接http://blog.csdn.net/haiyangzhibing/article/details/5493163 Visual Studio 2008用过一段时间后编辑器自动提示(智能提示:Inte

关于项目发布后“webservice由于连接方在一段时间后没有正确答复或连接的主机没有反应”的问题

最近的一个项目中用到了webservice:webservice发布在服务器上面,可以通过网址进行访问,在本地进行开发测试的时候没有遇到一点问题,但是在发布到外网上之后却报了一个错误:“由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败.”如下图: 再网上查找了一下也没有发现什么好的解决方法,看到之前园子里也有人碰到这个问题,但是也没有得到解决.后来请教了一下我的经理,问题已经解决.下面贴方法,目前只遇到这一次,不知道能不能为其他园友提供帮助,仅供参考吧. 1.打开webser

Can&#39;t connect to host &#39;*.*.*.*&#39;: 由于连接方在一段时间后没有正确答复或连接的主机没有响应,连接尝试失败。

SVN服务器信息: 操作系统:CentOS 6.5 SVN版本: svn --version svn, version 1.8.11 (r1643975) compiled Apr 27 2015, 03:11:15 on x86_64-unknown-linux-gnu Copyright (C) 2014 The Apache Software Foundation. This software consists of contributions made by many people; s