在Celery 3.1.18中,rpc后端无法避免为每个任务创建生成的队列

时间:2015-07-27 13:35:25

标签: rabbitmq celery rpc amqp

我在旧的Celery 3.0.24中找到了amqp后端,它为每个任务创建了结果队列,所以在阅读完之后:http://docs.celeryproject.org/en/master/whatsnew-3.1.html#new-rpc-result-backend 我将Celery升级到3.1.18,因为它说:

  

新的RPC结果后端   这个amqp结果后端的新实验版本是在经典RPC场景中使用的一个很好的替代方案,其中启动任务的过程始终是检索结果的过程。

     

它使用Kombu发送和检索结果,每个客户端使用唯一的队列来发送回复。这避免了原始amqp结果后端的显着开销,该后端为每个任务创建一个队列。

但是,当我按照以下方式测试时,情况并非如此:

tasks.py celery = Celery('tasks', backend='rpc') @celery.task def mul(x, y): return x * y

test_tasks.py result = mul.delay(2, 3) print "mul.delay(x, y)={0}".format(result.get())

开始工作 celery -A tasks worker -l info

观察rabbitmq中的队列 sudo rabbitmqctl list_queues

运行测试 python test_tasks.py

因此,每次运行此测试时,我都会看到创建了一个新的结果队列。它与文档正好相反。如果我像这样将rpc切换到amqb,还有更多: celery = Celery('tasks', backend='amqp')

再次尝试测试,我可以看到创建的队列,但很快就会在Celery 3.1.18中自动删除,这正是我想要的。只是好奇为什么行为不像文档说的那样,amqp后端工作,而rcp后端不起作用。

0 个答案:

没有答案