通过 Sentinel 将 Celery 连接到 Redis

Des*_*Cox 1 redis celery redis-sentinel

我如何告诉 celery 我在 redis 上寻找的服务名称?我正在尝试使用 Celery 4 中的内置 Sentinel 支持。我正在传递一个按文档所述配置的代理 URL :sentinel://0.0.0.0:26379

但是 redis 似乎抱怨没有通过 service_name:

File "/usr/local/lib/python2.7/dist-packages/redis/sentinel.py", line 222, in discover_master
    raise MasterNotFoundError("No master found for %r" % (service_name,))
OperationalError: No master found for None
Run Code Online (Sandbox Code Playgroud)

是否可以使用此 URL 格式传递 service_name ?我试过了

sentinel://0.0.0.0:26379/my_service
sentinel://0.0.0.0:26379/0/my_service
Run Code Online (Sandbox Code Playgroud)

我找不到任何关于连接 URL 的文档——我找到了redis-sentinel-URL,但我没有看到它包含在 redis 包中,所以我什至不确定它是否被 redis 使用。

Des*_*Cox 5

我设法解决了这个问题:celery 需要设置broker_urlbroker_transport_options配置。

1)broker_url采用哨兵 URL 的形式: sentinel://localhost:26379

2)broker_transport_options是一个需要您尝试连接的哨兵服务名称的字典。即,如果您想将作业推送到名为“fiddlesticks”的队列:{"master_name":"fiddlesticks"}

尽管上面的错误消息抱怨您传入了错误的“service_name”,但您实际上希望使用键“master_name”来传入。