提问者:小点点

芹菜广播vs RabbitMQ扇出


我最近一直在用芹菜,我不喜欢它。它的配置是混乱的,过于复杂的,并且没有很好的文档记录。

我想从一个生产者向多个消费者发送带有芹菜的广播消息。使我困惑的是芹菜术语和底层传输rabbitMQ的术语之间的差异。

在RabbitMQ中,您可以使用单个扇出交换和多个队列来广播消息:

但在Celery中,术语都搞乱了:这里可以有一个广播队列,它向多个消费者发送消息:

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

此外,芹菜的广播文档确实不足。我应该为广播队列指定哪种类型的RabbitMQ交换,扇出还是不扇出?你能举一个完整的例子吗?

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


共1个答案

匿名用户

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

Celery中的'queue'定义似乎包括交换,因此您可以在exchange('fanout')交换类型之上定义一个Celery队列,它将具有多个RabbitMQ队列的底层实现。

在这种情况下,我想您不希望Celery配置中有一个“广播”队列,除非您真的希望多个工作者处理同一任务。