【问题标题】:Connecting Celery to Redis via Sentinel通过 Sentinel 将 Celery 连接到 Redis
【发布时间】:2017-07-18 15:43:25
【问题描述】:

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

但 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 使用。

【问题讨论】:

    标签: redis celery redis-sentinel


    【解决方案1】:

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

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

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

    虽然上面的错误消息抱怨你传入了错误的“service_name”,但你实际上想使用键“master_name”来传入。

    【讨论】:

    • 嗨,Desiree,这里的“fiddlesticks”是什么意思?如果您不知道具体的作业队列,能否指定一个默认作业队列?
    • 在我的示例中,我的队列名称是“fiddlesticks”,我不知道如何指定默认作业队列。
    猜你喜欢
    • 2022-01-11
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2015-11-12
    • 1970-01-01
    • 2018-11-04
    • 2019-09-28
    相关资源
    最近更新 更多