1

如何告诉 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

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

sentinel://0.0.0.0:26379/my_service
sentinel://0.0.0.0:26379/0/my_service

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

4

1 回答 1

5

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

1)broker_url采用标记 URL 的形式:sentinel://localhost:26379

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

尽管上面的错误消息抱怨您传递了错误的“service_name”,但您实际上想使用密钥“master_name”传递。

于 2017-04-04T00:39:34.403 回答