Как я могу получить количество заданий в очереди определенного типа в gearman?

У меня есть несколько клиентов gearman, отправляющих работу, скажем job1.

$client = new GearmanClient();
$client->addServer();
$client->doBackground('job1', 'workload');

для обработки этого задания требуется, скажем, 10 секунд. Я хочу отслеживать, сколько заданий "job1" ждут работника, чтобы работать над ними в любой момент времени. Как я могу это сделать?

6 ответов


для быстрой проверки я использую этот bash one-liner:

(echo status ; sleep 0.1) | netcat 127.0.0.1 4730

это открывает соединение с экземпляром gearman, запущенным на localhost, и отправляет статус запрос. Содержит имя и количество заданий для данного экземпляра. Затем информация может быть обработана с помощью grep/awk/wc etc. для отчетности и оповещения.

Я также делаю то же самое с работники запрос, который показывает все подключенные работники.

(echo workers ; sleep 0.1) | netcat 127.0.0.1 4730

сон, чтобы держать соединение открытым достаточно долго для ответа.

полный список административных команд, и что означает вывод на http://gearman.org/protocol/. Просто найдите "административный протокол".


чтобы развернуть ответ d5ve, добавьте параметр-w в "тайм-аут" вашего подключения netcat, иначе вы никогда не вернетесь в командную строку.

$ (echo status ; sleep 0.1) | sudo netcat 127.0.0.1 4730 -w 1

telnet localhost 4730
status

worker_name total_queue currently_running number_of_workers
job1         1          1                 9

не похоже, что есть какие-либо немедленные способы получить эту информацию.

вот несколько вариантов. Во-первых, Если вы можете захватить дескрипторы заданий при их создании (поиск "говоря о проверке статуса"), вы можете хранить их в каком-то центральном месте и запрашивать о них у любого клиента.

во-вторых, вы можете настроить сервер Gearman на использование постоянные очереди, а затем выполните запрос к очереди самостоятельно. Это может быть проще и чище из двух вариантов.


Gearmand есть телнет можно запросить. (точные детали протокола можно найти на веб-сайте gearman -http://gearman.org/?id=protocol)

Я использовал этот код в качестве отправной точки для прокатки мои собственные. https://github.com/liorbk/php/blob/master/GearmanTelnet.php (этот код отлично подходит сам по себе, и вы должны иметь возможность отказаться использовать его из коробки)

Это менее красивое решение, но пока кто-то улучшает интерфейс администратора gearman, так что вы можете говорить непосредственно через PHP или пишет плагин для него, вы сами по себе


Я использую gearman_top, которая является частью mod-gearman.

пример вывода на сайт:

+-----------------------+--------+-------+-------+---------+
| Name                  | Worker | Avail | Queue | Running |
+-----------------------+--------+-------+-------+---------+
| check_results         | 1      | 1     | 0     | 0       |
| host                  | 3      | 3     | 0     | 0       |
| service               | 3      | 3     | 0     | 0       |
| eventhandler          | 3      | 3     | 0     | 0       |
| servicegroup_jmx4perl | 3      | 3     | 0     | 0       |
| hostgroup_japan       | 3      | 3     | 0     | 0       |
+-----------------------+--------+-------+-------+---------+