2014-10-09 27 views
0

我的問題建立關閉這一個:Temporary queue made in Celery一旦檢索到相應的結果,如何刪除臨時的RabbitMQ隊列?

我的應用程序需要檢索的結果,因爲他們上傳到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)。

附加說明:

我正在運行的所有的RabbitMQ服務器與HA集羣啓用。

回答

1

我這樣做的方式是使用rabbitmq中的rabbitmqadmin。我通過

wget localhost:15672/cli/rabbitmqadmin 

下載了安裝管理插件

rabbitmq-plugins enable rabbitmq_management 

確保你的用戶有RabbitMQ的管理員標籤之後,否則你將無法執行命令。然後,我使用python subprocess import和rabbitmqadmin delete queue name =''刪除了腳本中的隊列。請記住,除了沒有連字符之外,隊列名稱與相應的結果ID相同。

另外請確保您在rabbitmqadmin命令中添加params -v myvhost -u myusername -p mypassword,默認vhost爲/。

我相信這會刪除羣集中所有節點上的隊列,儘管我對此並不完全確定。

相關問題