我需要一个django-celery守护进程来听特定的rabbitmq频道

时间:2013-11-27 16:21:13

标签: python django rabbitmq celery django-celery

事实上,我有很少的django应用程序与芹菜任务。我需要在特定通道中执行每个任务,以便我可以控制负载。例如,我可能有3台服务器收听channel_for_app_1,2台收听channel_for_app_2。我的问题是如何运行celery守护进程并指定通道?还有其他方法吗?

2 个答案:

答案 0 :(得分:1)

在django设置中,您可以指定CELERY_QUEUES:

CELERY_QUEUES = {
"worker": {
    "exchange": "worker",
    "binding_key": "worker" 
},
像这样。每个密钥都是一个队列名称,如果你想获得花哨(多次交换等),你可以更改交换和绑定密钥,但我从来不需要。

定义任务时,您可以

@task(queue="worker", etc)

最后一步是在运行celery时指定队列名称 - 通过celery守护程序配置,或在运行它时在命令行上运行。所有这一切的结果是芹菜任务将转到任务定义指定的队列,并且仅在运行指定队列的框上。

所以当你说“频道”时,我不确定你的意思是否明显不同,但我总是使用多个每个任务的队列来完成你所描述的内容。

答案 1 :(得分:1)

请查看此页:http://docs.celeryproject.org/en/latest/userguide/routing.html

您的芹菜应该以-Q,--queue设置开始,这些设置定义将用于获取任务的队列