代码之家  ›  专栏  ›  技术社区  ›  Afshin Mehrabani Mohd Jafar

在不同的豆荚中与多个工人一起使用芹菜

  •  5
  • Afshin Mehrabani Mohd Jafar  · 技术社区  · 7 年前

    我想做的是用芹菜配Kubernetes。我在不同的pod中使用Redis作为消息代理,每个芹菜队列有多个pod。

    想象一下,如果我有3个队列,我将有3个不同的pod(即工人)可以接受和处理请求。

    到目前为止,一切都很好,但我的问题是,如果我克隆其中一个队列的吊舱,使一个队列有两个吊舱,会发生什么?

    我认为客户端(即Django)使用Redis创建了一条新消息,发送给工人并启动作业,但我不清楚会发生什么,因为我有两个pod在侦听同一队列?第一个pod是否接受请求并启动作业,并阻止另一个pod接受请求?

    (我试着搜索了一下芹菜的文档,看看是否能找到任何线索,但我找不到。这就是为什么我要问这个问题。)

    2 回复  |  直到 7 年前
        1
  •  6
  •   georgexsh    7 年前

    我猜您使用的是基本任务类型,它使用“直接”队列类型,而不是“扇出”或“主题”队列,后两者有很大的区别,这里将不讨论。

    list 对象作为队列的存储( source ),使用命令 LPUSH BRPOP 使用消息。

    BRPOP公司 ( doc this operation is atomic ,没有两个连接可以获得相同的元素。

    芹菜利用此功能来保证 消息传递。使用回执不影响本保证。


        2
  •  0
  •   danielepolencic    7 年前

    任务消息不会从队列中删除,直到该消息已被工作人员确认。工作进程可以提前保留许多消息,即使该工作进程因电源故障或其他原因而死亡,该消息也会重新传递给另一个工作进程。

    更多信息: http://docs.celeryproject.org/en/latest/userguide/tasks.html