Обнаружение недоступного сервера с PHP и Gearman - PullRequest
2 голосов
/ 31 октября 2011

В настоящее время я использую Gearman с PHP, используя стандартные привязки ( документы здесь ).Все работает нормально, но у меня есть одна небольшая проблема, связанная с невозможностью определить, когда вызов GearmanClient :: addServer ( документы здесь ) является "успешным", и я имею в виду ...

Проблема в том, что при добавлении сервера не предпринимается никаких операций ввода-вывода с сокетом, а это означает, что сервер может фактически не существовать или работать.Это означает, что последующие вызовы кода (в случае, когда сервер не существует) не работают и приводят к предупреждениям PHP

Есть ли какой-либо способ или лучший способ подтвердить, что демон Gearman работаетна сервере до или после его добавления?

Я хотел бы добиться этого, чтобы я мог надежно обрабатывать сценарии, в которых может погибнуть Gearman или, возможно, с сервером невозможно связаться *

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2016

Вы можете использовать эту библиотеку: https://github.com/necromant2005/gearman-stats У него нет внешних зависимостей.

$adapter = new \TweeGearmanStat\Queue\Gearman(array(
    'h1' => array('host' => '10.0.0.1', 'port' => 4730, 'timeout' => 1),
    'h2' => array('host' => '10.0.0.2', 'port' => 4730, 'timeout' => 1),
));
$status = $adapter->status();
var_dump($status);
0 голосов
/ 02 января 2012

Сначала мы попробовали это сделать, вручную вызвав fsockopen на хосте, и порт перешел на addServer, но оказалось, что это может оставить много зависающих соединений, поскольку сервер Gearman ожидает, что что-то произойдет через этот сокет.

Мы используем скрипт монитора для проверки состояния демона и его рабочих - что-то похожее на этот скрипт perl в группах Google .Мы изменили сценарий, чтобы перезапустить демон, если он не работал.

Если это не подходит, взгляните на Протокол Gearman (в частности, раздел «Административный протокол», на который есть ссылка ввышеупомянутый поток) и используйте команду status.Это даст вам информацию о состоянии заданий и рабочих, но также означает, что вы можете выполнить сокетное соединение с демоном и не оставлять его зависшим.

...