關於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項目

 

 

 

六、任務處理接收都正常,問題完美解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM