芹菜广播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
)并试用了它,它看起来像这样工作:
Broadcast
'队列'。 Exchange
和一个带唯一id的auto_delete
队列(通过uuid
),并创建别名'foo'(我不认为别名实际上在任何地方使用,只是参考,因为队列的真实姓名是随机生成的) 所以,这个类被命名为Broadcast
,但它确实是一个唯一命名的队列,它被绑定到扇出交换机。 因此,当每个工作人员启动时,它会创建自己的唯一队列并绑定到扇出交换。
如果您使用的是Celery 4.0.1+,并且广播无法为您工作,请检查https://github.com/celery/celery/pull/3934并查看clokep的解决方案,它将恢复先前版本的amqp.py和这对我行得通。
链接地址: http://www.djcxy.com/p/21173.html