【发布时间】:2014-05-22 03:01:01
【问题描述】:
我开始熟悉 RabbitMQ 术语,所以我会尽力解释。几周后我将进行公开测试,这是我希望实现的设置。我希望 Django 成为制片人;将消息生成到远程 RabbitMQ 盒子和另一个在 RabbitMQ 队列上侦听任务的 Celery 盒子。所以总共会有三个盒子。 Django、RabbitMQ 和芹菜。到目前为止,根据 Celery 文档,我已经成功地能够在另一台机器上同时运行 Django 和 Celery 以及 Rabbit MQ。 Django 只是简单地调用视图中的任务:
add.delay(3, 3)
然后消息被发送到 RabbitMQ。 RabbitMQ 将其发送回发送任务的同一台机器(因为 Django 和 celery 共享同一个盒子)并由 celery 处理任务。
这非常适合开发目的。然而,让 Django 和 Celery 在同一个机器上运行并不是一个好主意,因为两者都必须竞争内存和 CPU。这里的整个目标是让客户端进入和退出 HTTP 请求周期,并让 celery 工作人员处理任务。但是,如果机器正在接受 HTTP 请求并同时处理任务,它的速度会大大降低。
所以我想知道有没有办法让这一切相互分离。让 Django 发送任务,RabbitMQ 转发它们,然后 Celery 处理它们(生产者、代理、消费者)。
我该怎么做呢?非常简单的例子会有所帮助!
【问题讨论】:
标签: django rabbitmq celery django-celery