关于Celery-4.4.7 Bug ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@localhost:5672//:

一、问题:

使用命令后台启动Celery任务服务
celery multi start django_node -A django_celery_project -l info

发现无法加载celery.py,里面的app实例,于是花了一天的时间百度上网查询,最终解决不了该问题,自己开始动手看源代码,
最终查出来,启动celery multi start 会加载两次app名字,第一次可以获取app名字,第二次创建app的时候,发现app是None,导致celery服务启动失败,
并且是链接MQ是以主机:localhost 和 用户名:Guest。

在base.py源码,函数:setup_app_from_commandline,增加打印参数,我们可以发现实例的变化,从
<Celery __main__ at 0x7f556f5400b8>[我们自己定义的 celery.py 里面在app实例] ===> <Celery default at 0x7fd1c9aa9f60>[默认的实例]

[root@mq1 opt]# celery multi start node1 -A proj -l info
app=proj
app <Celery __main__ at 0x7f556f5400b8>
celery multi v4.4.7 (cliffs)
> Starting nodes...
app=None
app <Celery default at 0x7fd1c9aa9f60>
> node1@mq1: OK

 

从GitHub官方的Issues看到,有人反馈该问题,但是没有具体的解决方法,解决方法也已经GitHub回答,地址:https://github.com/celery/celery/issues/6336 

二、报错内容:

[2020-09-09 14:50:49,689: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@localhost:5672//:
 Couldn't log in: server connection error 403, message: ACCESS_REFUSED - Login was refused using authentication mechanism 
PLAIN. For details see the broker logfile..
Trying again in 6.00 seconds... (1/100)

 三、解决方法

# 修改Celery源代码解决
vi $PYTHON_HOME/lib/site-packages/celery/bin/base.py +476 ... def setup_app_from_commandline(self, argv): preload_options, remaining_options = self.parse_preload_options(argv) quiet = preload_options.get('quiet') if quiet is not None: self.quiet = quiet try: self.no_color = preload_options['no_color'] except KeyError: pass workdir = preload_options.get('workdir') if workdir: os.chdir(workdir) app = (preload_options.get('app') or os.environ.get('CELERY_APP') or self.app) # Add Code 增加代码部分 if app: os.environ['CELERY_APP']=app preload_loader = preload_options.get('loader') if preload_loader: # Default app takes loader from this env (Issue #1066). os.environ['CELERY_LOADER'] = preload_loader loader = (preload_loader, os.environ.get('CELERY_LOADER') or 'default') broker = preload_options.get('broker', None) ...

 四、问题已解决,该问题只针对Celery-4.4.7版本,不排除后期版本更新,解决该Bug

 

五、验证是否任务是否可以调度

 5.1、启动celery任务服务

 5.2、启动Django项目

 

 

 

六、任务处理接收都正常,问题完美解决。

posted @ 2020-09-09 12:58  小粉优化大师  阅读(1119)  评论(0编辑  收藏  举报