首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >芹菜广播与RabbitMQ扇形

芹菜广播与RabbitMQ扇形
EN

Stack Overflow用户
提问于 2014-06-18 11:36:57
回答 3查看 6.7K关注 0票数 13

我最近一直在吃芹菜,我不喜欢。它的配置乱七八糟,过于复杂,而且文档也不完整。

我想用芹菜从一个单一的生产者向多个消费者发送广播信息。令我困惑的是芹菜术语和底层运输RabbitMQ术语之间的差异。

在RabbitMQ中,可以有一个扇形交换和多个队列来广播消息:

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

我甚至不明白芹菜广播队列是如何工作的,因为具有多个使用者的RabbitMQ队列是用来进行负载平衡的。因此,在RabbitMQ中,如果多个消费者(即一个消费者池)连接到同一个队列,则只有一个使用者将接收和处理消息在RabbitMQ文档中称为圆形罗宾。

此外,芹菜文件的广播是真的不够。我应该为广播队列指定哪种类型的RabbitMQ交换?你能提供一个完整的例子吗?

因此,我想要的是(1)澄清芹菜中广播队列的概念和实现,以及(2)广播队列配置的完整示例。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-18 12:39:04

这个有用吗?

http://celery.readthedocs.org/en/latest/userguide/routing.html#exchanges-queues-and-routing-keys

看来,芹菜中的“队列”定义包括交换,因此您可以在Exchange('fanout') exchange类型之上定义一个芹菜队列,该队列将具有多个RabbitMQ队列的底层实现。

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

票数 2
EN

Stack Overflow用户

发布于 2014-07-30 19:33:21

在查看了代码(它在kombu.common包中,而不是在celery中)并试用了它之后,它似乎是这样工作的:

  • 您可以在芹菜配置中定义一个名为“foo”的Broadcast 'queue‘。
  • 这将创建一个名为“foo”的Exchange,以及一个具有唯一id (通过uuid)和别名“foo”的auto_delete队列(我不认为这个别名实际上在任何地方使用,它只是供参考,因为队列的实名是随机生成的)
  • 唯一的队列绑定到“foo”交换

因此,这个类被命名为Broadcast,但是它实际上是一个唯一命名的队列,它绑定到一个扇出交换。因此,当每个工作人员启动时,它会创建自己的唯一队列,并绑定到扇出交换。

票数 3
EN

Stack Overflow用户

发布于 2017-06-28 10:29:18

如果您使用的是芹菜4.0.1+,广播对您不起作用,请检查https://github.com/celery/celery/pull/3934并查看clokep的解决方案,它恢复了以前版本的amqp.py,这对我有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24284518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档