一旦检索到相应的结果,如何删除临时RabbitMQ队列?

时间:2014-10-09 18:40:03

标签: rabbitmq celery

我的问题建立在这个问题之上:Temporary queue made in Celery

我的应用程序需要检索结果,因为它会将结果上传到S3文件。但是,正在进行的临时队列数导致我的代理崩溃(机器没有足够的内存)。一旦检索到相应的结果,我想删除临时队列。在我的芹菜客户端脚本中,我正在迭代结果列表(其中每个结果来自function.delay()):

for result in result_list:
    while True:
        if result.ready():
            #do something with result
            #I WANT TO DELETE TEMPORARY QUEUE HERE

有什么方法可以实现上述目的 - 一旦检索到结果就删除临时队列?

我会在celeryconfig中使用CELERY_TASK_RESULT_EXPIRES选项,但我不知道什么时候可以安全地清理临时队列,因为结果可能没有被检索到。无论如何,我可以删除此脚本中的特定队列(请注意,我从结果中获取了队列ID。)

附加说明:

我在启用了HA的群集中运行所有rabbitmq服务器。

1 个答案:

答案 0 :(得分:1)

我这样做的方法是使用来自rabbitmq的rabbitmqadmin。我是通过

下载的
wget localhost:15672/cli/rabbitmqadmin 

安装管理插件后

rabbitmq-plugins enable rabbitmq_management

确保您的用户拥有rabbitmq的管理员标记,否则您将无法执行命令。然后我使用python子进程导入和rabbitmqadmin删除队列名称删除了我的脚本中的队列='' 。请记住,队列名称与相应的结果ID相同,但没有连字符。

另外请确保在rabbitmqadmin命令中添加params -v myvhost -u myusername -p mypassword,默认vhost为/。

我相信这会删除群集中所有节点的队列,但我并不完全确定这一点。