我最近一直在吃芹菜,我不喜欢。它的配置乱七八糟,过于复杂,而且文档也不完整。
我想用芹菜从一个单一的生产者向多个消费者发送广播信息。令我困惑的是芹菜术语和底层运输RabbitMQ术语之间的差异。
在RabbitMQ中,可以有一个扇形交换和多个队列来广播消息:

但是在芹菜中,所有的术语都是混乱的:在这里,您可以拥有一个广播队列,它向多个消费者发送消息:

我甚至不明白芹菜广播队列是如何工作的,因为具有多个使用者的RabbitMQ队列是用来进行负载平衡的。因此,在RabbitMQ中,如果多个消费者(即一个消费者池)连接到同一个队列,则只有一个使用者将接收和处理消息在RabbitMQ文档中称为圆形罗宾。。
此外,芹菜文件的广播是真的不够。我应该为广播队列指定哪种类型的RabbitMQ交换?你能提供一个完整的例子吗?
因此,我想要的是(1)澄清芹菜中广播队列的概念和实现,以及(2)广播队列配置的完整示例。谢谢。
发布于 2014-06-18 12:39:04
这个有用吗?
http://celery.readthedocs.org/en/latest/userguide/routing.html#exchanges-queues-and-routing-keys
看来,芹菜中的“队列”定义包括交换,因此您可以在Exchange('fanout') exchange类型之上定义一个芹菜队列,该队列将具有多个RabbitMQ队列的底层实现。
在这种情况下,我猜您不希望芹菜配置中有一个“广播”队列,除非您真的希望多个工作人员处理相同的任务。
发布于 2014-07-30 19:33:21
在查看了代码(它在kombu.common包中,而不是在celery中)并试用了它之后,它似乎是这样工作的:
Broadcast 'queue‘。Exchange,以及一个具有唯一id (通过uuid)和别名“foo”的auto_delete队列(我不认为这个别名实际上在任何地方使用,它只是供参考,因为队列的实名是随机生成的)因此,这个类被命名为Broadcast,但是它实际上是一个唯一命名的队列,它绑定到一个扇出交换。因此,当每个工作人员启动时,它会创建自己的唯一队列,并绑定到扇出交换。
发布于 2017-06-28 10:29:18
如果您使用的是芹菜4.0.1+,广播对您不起作用,请检查https://github.com/celery/celery/pull/3934并查看clokep的解决方案,它恢复了以前版本的amqp.py,这对我有效。
https://stackoverflow.com/questions/24284518
复制相似问题