2016-11-29 9 views
5

rabbitmqctl правильно сообщает тысячи поставленных в очередь задач:Почему сельдерей.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 для других способов сделать это.

Update:

pika является питон клиент для взаимодействия с RabbitMQ. Вы можете использовать его для потребления сообщений. Вот сообщение: simple example to consume. Вы можете проверить больше usage examples на pika docs.

+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