Celery task.delay()不尊重代理配置

时间:2019-08-28 13:27:33

标签: django python-3.x redis celery celery-task

我的配置

Celery - 4.3.0
Python - 3.7.1
Django - 2
Broker - Redis
OS - Windows 10

我正在使用芹菜约6-7个月,这真是太神奇了。 今天,我遇到了一个奇怪的问题。 我已将Redis设置为我的消息代理。 因此,当我没有对 bind authentication 进行限制时,即默认为不进行身份验证的localhost,一切正常。

但是当我对 bind authentication 配置施加一些限制时,即localhost更改为我的网络IP,并通过密码启用了身份验证,并由celery初始化为

app = Celery('app_name',
             backend='redis',
             broker='redis://'
                    + lib.get_conf('redis_db_user')
                    + ':'
                    + lib.get_conf('redis_db_password')
                    + '@'
                    + lib.get_conf('redis_db_host')
                    + ':'
                    + str(lib.get_conf('redis_db_port')))

我从yaml文件加载此配置:

#REDIS Database
redis_db_host: "192.168.1.236"
redis_db_user: ""
redis_db_password: "pass123"
redis_db_name: "1"
redis_db_port: 6379

通过上述配置,我的芹菜可以完美地与所有工人一起运转。我的一些工作人员分布在网络中,因此我无法使用localhost配置。

TL; DR

现在,我的大部分任务是按celery-beat计划的,我的某些任务是通过调用delay()方法从此计划的任务中调用的。现在这里发生了错误!!!

my_task.delay(param1,..)在调用时不遵循当前的芹菜配置,而是尝试使用默认本地主机配置调用redis。

kombu.exceptions.OperationalError: Error 10061 connecting to localhost:6379. No connection could be made because the target machine actively refused it.

现在这也发生在Django的视图中。

我尝试过的事情-

1。在settings.py

中添加芹菜设置
CELERY_RESULT_BACKEND = 'redis'

CELERY_BROKER_URL = 'redis://' \
                    + lib.get_conf('redis_db_user')\
                    + ':'\
                    + lib.get_conf('redis_db_password')\
                    + '@'\
                    + lib.get_conf('redis_db_host')\
                    + ':'\
                    + str(lib.get_conf('redis_db_port'))

2。寻找其他替代方案

就像尝试过my_task.s(param1,..).apply_async()

3。阅读芹菜的文档

我从这里读过https://docs.celeryproject.org/en/latest/userguide/calling.html

4。老学校

重新启动一切;)

但是所有解决方案都不适合我:(

  

我要在生产环境中部署应用程序,并且需要 bind 和   身份验证配置

0 个答案:

没有答案