通过 Sentinel 将 Celery 连接到 Redis
Connecting Celery to Redis via Sentinel
如何告诉 celery 我在 redis 上寻找的服务名称?我正在尝试在 Celery 4 中使用内置的 Sentinel 支持。我正在传递一个代理 URL 配置,正如它在 the documentation 中所说: 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
我没能找到关于连接 URLs 的任何文档——我找到了 redis-sentinel-URL 但我没有看到它包含在 redis 包中,所以我不是甚至确定它正在被 redis 使用。
我设法解决了这个问题:celery 需要同时设置 broker_url
和 broker_transport_options
配置。
1) broker_url
采用哨兵形式 URL:
sentinel://localhost:26379
2) broker_transport_options
是一个字典,需要您尝试连接的哨兵服务的名称。即,如果您想将作业推送到名为 'fiddlesticks' 的队列:
{"master_name":"fiddlesticks"}
虽然上面的错误信息是在抱怨你传入错误的'service_name',但你实际上是想使用密钥'master_name'传入。
如何告诉 celery 我在 redis 上寻找的服务名称?我正在尝试在 Celery 4 中使用内置的 Sentinel 支持。我正在传递一个代理 URL 配置,正如它在 the documentation 中所说: 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
我没能找到关于连接 URLs 的任何文档——我找到了 redis-sentinel-URL 但我没有看到它包含在 redis 包中,所以我不是甚至确定它正在被 redis 使用。
我设法解决了这个问题:celery 需要同时设置 broker_url
和 broker_transport_options
配置。
1) broker_url
采用哨兵形式 URL:
sentinel://localhost:26379
2) broker_transport_options
是一个字典,需要您尝试连接的哨兵服务的名称。即,如果您想将作业推送到名为 'fiddlesticks' 的队列:
{"master_name":"fiddlesticks"}
虽然上面的错误信息是在抱怨你传入错误的'service_name',但你实际上是想使用密钥'master_name'传入。