芹菜广播vs RabbitMQ粉丝

我最近一直在和芹菜一起工作,我不喜欢它。 它的配置很混乱,过于复杂,记录不完整。

我想从一个生产商向多个消费者发送Celery的广播消息。 令我感到困惑的是Celery条款与基础运输条款RabbitMQ之间的差异。

在RabbitMQ中,您可以拥有一个扇出式Exchange和多个队列来广播消息:

在这里输入图像描述

但在Celery中,这些术语都是混乱的:在这里你可以有一个广播队列,它将消息发送给多个消费者:

在这里输入图像描述

我甚至不明白,Celery广播队列应该如何工作,导致多个消费者的RabbitMQ队列用于负载均衡。 因此,在RabbitMQ中,如果多个消费者(即消费者池)连接到同一队列,则只有一个消费者会接收和处理消息,这在RabbitMQ文档中称为循环。

另外,关于广播的芹菜文档实际上还不够。 我应该为广播队列,扇出还是不指定什么类型的RabbitMQ交换? 你能提供一个完整的例子吗?

因此,我要求的是(1)Celery中广播队列的概念和实现的说明,以及(2)广播队列配置的完整示例。 谢谢。


这有帮助吗?
http://celery.readthedocs.org/en/latest/userguide/routing.html#exchanges-queues-and-routing-keys

看起来Celery中的'队列'定义包含了交换,所以你可以在Exchange('fanout')交换类型的顶部定义一个Celery队列,它将有一个基于多个RabbitMQ队列的实现。

在这种情况下,我猜你不想在Celery配置中使用“广播”队列,除非你真的想让多个工作人员处理相同的任务。


看过代码(它在kombu.common软件包中,而不是celery )并试用了它,它看起来像这样工作:

  • 你可以在你的芹菜配置中定义一个名为'foo'的Broadcast '队列'。
  • 这会创建一个名为'foo'的Exchange和一个带唯一id的auto_delete队列(通过uuid ),并创建别名'foo'(我不认为别名实际上在任何地方使用,只是参考,因为队列的真实姓名是随机生成的)
  • 唯一的队列绑定到'foo'交换
  • 所以,这个类被命名为Broadcast ,但它确实是一个唯一命名的队列,它被绑定到扇出交换机。 因此,当每个工作人员启动时,它会创建自己的唯一队列并绑定到扇出交换。


    如果您使用的是Celery 4.0.1+,并且广播无法为您工作,请检查https://github.com/celery/celery/pull/3934并查看clokep的解决方案,它将恢复先前版本的amqp.py和这对我行得通。

    链接地址: http://www.djcxy.com/p/21173.html

    上一篇: Celery broadcast vs RabbitMQ fanout

    下一篇: WTForm: FieldList with SelectField, how do I render?