如何设置 Celery 以通过 ssl 与 Azure Redis 实例对话

Gre*_*her 7 python azure redis celery python-2.7

使用“如何在 microsoft azure 上的 django 项目中配置 celery-redis? ”的精彩答案,我可以使用以下 Python 代码将 Celery 配置为使用非 ssl 端口 6379使用 Azure Redis 缓存:

from celery import Celery
# This one works
url = 'redis://:<access key>@<my server>.redis.cache.windows.net:6379/0'
# I want to use a url that specifies ssl like one of the following:
# url = 'redis://:<my key>=@<my server>.redis.cache.windows.net:6380/0'
# url = 'redis://:<my key>@<my server>.redis.cache.windows.net:6380/0?ssl=True'
app = Celery('tasks', broker=url)

@app.task
def add(x, y):
    return x + y
Run Code Online (Sandbox Code Playgroud)

但是,我想让 celery 使用 ssl 并使用 ssl 在端口 3380上与 Azure Redis 缓存进行通信。如果我将端口更改为 6380,则在运行以下命令后等待几分钟后会收到“从套接字读取时出错”的消息:

celery -A tasks worker --loglevel=INFO -Q "celery" -Ofair

有谁知道如何在 Celery 或 Azure 端进行配置,以便我可以使用ssl让 celery 在Azure Redis 缓存上的默认3380端口上进行通信?

我使用的是最新版本的 Celery (4.0.2)

请注意,当使用端口 3380 和 ssl 使用 Python 的 redis 库直接从Linux 客户端(在 Azure 上)连接时,类似以下的代码可以正常工作:

import redis
redis.StrictRedis(host='<my host>.redis.cache.windows.net', port=6380, db=0, password='<my key>', ssl=True)
Run Code Online (Sandbox Code Playgroud)

Dan*_*iaz 10

rediss://已经可以使用redis://.

url = 'rediss://:<access key>@<my server>.redis.cache.windows.net:6380/0'
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这应该是现在公认的答案。由于 celery 团队修复了问题 2833,您可能不再需要使用 `broker_use_ssl` 和 `redis_backend_use_ssl` 配置参数。请注意,为了使其正常工作,确切的连接字符串是: `url = 'rediss://:&lt;access key&gt;@&lt;my server&gt;.redis.cache.windows.net:6380/0?ssl_cert_reqs=必需'` 请参阅文档 https://docs.celeryproject.org/en/latest/userguide/configuration.html#redis-backend-settings (8认同)

Tod*_*ler 3

对于代理,您应该能够设置broker_use_ssl配置选项。

对于后端,选项redis_backend_use_ssl在 4.1.0 版本中可用。

通过 URL 启用 SSL 的功能尚不可用:https://github.com/celery/celery/issues/2833

另请注意,在 4.0 中不再支持 Windows。但是,您可以按照https://github.com/celery/celery/issues/4082上的说明进行操作