2

私は現在、標準のバインディングを使用してPHPでGearmanを利用しています(ドキュメントはこちら)。すべて正常に機能していますが、GearmanClient :: addServer(ここのドキュメント)への呼び出しが「成功」したときに検出できないという小さな問題が1つあります。つまり、...

問題は、サーバーを追加してもソケットI / Oが試行されないことです。つまり、サーバーが実際に存在しないか、動作していない可能性があります。これは、後続のコード呼び出し(サーバーが実際には存在しないシナリオで)が失敗し、PHP警告が発生することを意味します

ギアマンデーモンがサーバー上で追加前または追加後に動作していることを確認する方法はありますか、または最善の方法は何ですか?

これを実現して、Gearmanが死亡した可能性があるシナリオや、サーバーに接続できない可能性があるシナリオを確実に処理できるようにしたいと思います。

どうもありがとう。

4

2 に答える 2

0

fsockopen最初に、渡されたホストとポートを手動で呼び出すことでこれを試しましたaddServerが、Gearmanサーバーがそのソケットで何かが発生することを予期しているため、これにより多くの接続がハングしたままになる可能性があります。

監視スクリプトを使用して、デーモンとそのワーカーのステータスを確認します。これは、Googleグループのこのperlスクリプトに似ています。デーモンが実行されていない場合にデーモンを再起動するようにスクリプトを変更しました。

これが魅力的でない場合は、Gearmanプロトコル(具体的には、上記のスレッドで参照されている「管理プロトコル」セクション)を確認し、statusコマンドを使用してください。これにより、ジョブとワーカーのステータスに関する情報が得られますが、デーモンへのソケット接続を実行でき、デーモンをハングさせたままにしないこともできます。

于 2012-01-02T16:46:05.813 に答える
0

このライブラリを使用できます: https://github.com/necroant2005/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);
于 2016-11-03T18:28:05.993 に答える