【问题标题】:distributing celery workers by consumer按消费者分发芹菜工人
【发布时间】:2019-01-22 15:44:23
【问题描述】:


这是我的问题的一些背景。
我们有一个将 xml 转换为 api 调用的转换器。
我们有很多客户在转换 xml,现在有些客户必须等到客户完成 100 个 xml 文件的转换。
我们有 celery 与 rabbitmq 合作

我想要实现的是:
将所有芹菜工人分配给一位客户,直到另一位客户发送 xml 如果队列中有另一个客户,则将一半的芹菜工人分配给另一个客户。

谁能指出我正确的方向,我似乎无法弄清楚从哪里开始寻找。 抱歉我的奇怪句子英语不是我的第一语言。

【问题讨论】:

    标签: python rabbitmq celery


    【解决方案1】:

    关于您想要实现的目标 - 我认为对 Celery 来说太复杂了。

    显而易见的答案是在启动 worker 时使用 concurrency 选项来增加 Celery worker 的数量。这很容易做到,您无需更改代码。我会推荐它。

    然而,另一个不太容易的选项可能是一个很好的解决方案,即为每个客户使用单独的RabbiMQ virtual host。 在这种情况下,我无法告诉你如何完全做到这一点,但它可以作为你的起点。

    【讨论】:

    • 嗨!您的解决方案听起来应该可以完美运行。你知道是否有办法让 1 个 celery 工人拥有多个虚拟主机作为经纪人?
    • 关于代理的多个 vhosts - 在官方 documentation 中没有任何迹象。该解决方案是为一个 client 在 RabbitMQ 中为一个 vhost 启动一个 celery worker。使用 Docker 可以实现,并不难。