Подтвердить что ты не робот

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

У меня есть несколько клиентов-посредников, отправляющих задание, скажем job1.

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

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

4b9b3361

Ответ 1

Для быстрой проверки я использую этот bash однострочный:

(echo status ; sleep 0.1) | netcat 127.0.0.1 4730

Это открывает соединение с экземпляром ретранслятора, запущенным на локальном хосте, и отправляет запрос состояния. Он содержит имя и количество заданий в этом экземпляре. Затем информация может обрабатываться с помощью grep/awk/wc и т.д. Для сообщения и оповещения.

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

(echo workers ; sleep 0.1) | netcat 127.0.0.1 4730

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

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

Ответ 2

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

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

Ответ 3

telnet localhost 4730
status

worker_name total_queue currently_running number_of_workers
job1         1          1                 9

Ответ 4

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

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

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

Ответ 5

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

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

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