芹菜文档建议 Rabbit-MQ 必须像中间人一样行事,在那里它被用作消息传递平台。
在我的基础设施中,Rabbit-MQ 是每秒为我提供一些数据的主要服务器。现在,每当提供数据时,我都希望 Celery 执行某些任务。
现在,这抛弃了整个发布者-工作线程模型,因为我们没有在生成消息时使用 Celery。
那么,我该怎么做呢?
Celery 可以使用多个后端。如果您已经在使用 RabbitMQ,则此选项具有吸引力。
然而,这些是不同的关注点。使用通用的 RabbitMQ 客户端库(如 pika)为您的消息实现一个使用者,然后,如果需要,使用 Celery 来调度任务。
Celery 不是任意的 MQ 消费者。如果你想要这个,你应该看看Kombu - Python的消息传递库(这也是一个Celery子项目)。
你要做的是编写一个基于 Kombu 的小型服务,它会消耗来自 RabbitMQ 的任意消息,并发送 Celery 任务以在 Celery 集群上执行。您可以使用其他库与 RabbitMQ 通信,但由于您想最终执行 Celery 任务,因此无论如何您都会安装 Celery,这反过来将安装其主要依赖项之一 - Kombu。要与RabbitMQ Kombu通信,请使用py-amqp或(如果已安装)librabbitmq。
自定义消费者似乎是将其与 Celery 集成的最佳方式。
看看 http://docs.celeryproject.org/en/latest/userguide/extending.html#id4