2016-11-29 24 views
5

rabbitmqctl正確地報告排隊等候的任務上千:爲什麼celery.control.inspect報告比rabbitmqctl更少的排隊任務?

$ sudo rabbitmqctl -q list_queues name messages messages_ready messages_unacknowledged 
default 13142 13126 16 

然而,芹菜報道:

>>> len(app.control.inspect().active()['[email protected]']) 
4 
>>> len(app.control.inspect().scheduled()['[email protected]']) 
1 
>>> len(app.control.inspect().reserved()['[email protected]']) 
16 
>>> len(app.control.inspect().revoked()['[email protected]']) 
0 

正確的數量(千)的任務似乎app.control.inspect().stats()['[email protected]']['total']展現出來,但我真的想知道正確的優秀的來自python內部的排隊任務,而active()等似乎只能報告多達16個左右 - 也許有一個限制?

使用特權子進程調用rabbitmqctl,我怎麼能得到充分的排隊任務數從蟒之內,最好是通過celery(順便說一句這個服務器使用芹菜3.1.8目前)的短

回答

5

芹菜的app.control.inspect將檢查任務僅通過運行工作人員處理

即使您的隊列中有成千上萬的任務,您的工作人員在任何給定的時間點都只能執行一些指定的任務。這些是active任務。

除此之外,工作人員可以預取一些將爲該工作人員保留的任務。這些將顯示在reserved任務中。

如果您已經爲您的任務設置了ETA,或者如果有定期任務,他們將進入scheduled任務。

看起來你已經開始了併發度爲4的工作者(或者在4核心機器上具有默認設置的工人)。所以主動任務是4.每個工作進程預取了4個任務,這導致了16個保留任務。

AFAIK,沒有辦法讓芹菜排隊的任務總數。

但是,有幾個python解決方案來獲取隊列中消息的總數。您可以檢查my other answer here其他方式來執行此操作。

更新:

pika是一個Python客戶端與RabbitMQ的互動。您可以使用它來使用消息。這裏是每條消息的simple example to consume。您可以通過pika文檔查看更多usage examples

+0

謝謝!我是否還可以獲得隊列中每條消息使用「pika」等的詳細信息,或者只是隊列中消息的總數? – DrMeers

+0

謝謝@ChillarAnand;通過「pika」「消費」消息是否讓他們安全地進入芹菜處理隊列?如果是這樣,這是一個很好的解決方案 – DrMeers

+1

@DrMeers我不認爲有這樣的方法。不過,您可以使用並重新發送郵件http://rabbitmq.1065348.n5.nabble.com/How-to-get-the-list-of-messages-from-Queue-without-consuming-the-messages-td28135.html – ChillarAnand