zoukankan      html  css  js  c++  java
  • 关于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项目

     

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

  • 相关阅读:
    java枚举enum
    冒泡排序、选择排序、插入排序、二分法排序、快速排序、二叉树排序、堆排序总结
    Django-tinymce富文本的使用
    Redis-基本操作总结
    git-总结大全
    css-总结
    html-table布局
    html表单示例
    html总结
    python-浅拷贝、深拷贝实例以及讲解
  • 原文地址:https://www.cnblogs.com/ygbh/p/13637486.html
Copyright © 2011-2022 走看看