PHP/Net_GearmanのGearmanでは、他のワーカーから呼び出されたジョブを実行するワーカーは応答しなくなります

私はギアマンを使用して、複数のワーカーサーバーに渡って長時間実行されるタスクを配布しています。私のワーカー・タスクの1つでは、別のバックグラウンド・ジョブを呼び出そうとします。バックグラウンドジョブは別のワーカーによって正常に実行されますが、そのワーカープロセスは後でギヤマンに追加される新しいジョブには反応しません。

誰でも何が起こっているのか知っていますか?これはギアマンの特徴ですか?

編集:

また、従業員を再起動すると、他の従業員が待機していたタスクが繰り返されます。
Gearmanは仕事が完了したことを認識していないようです。

編集2:

試みた:

var_dump($this->conn);
var_dump($this->handle);

他のワーカーから呼び出されたワーカー関数内から。これは私が受け取った出力です:

NULL
string(0) ""

編集3:

さて、私はこれを解決するためのハッキーの方法を思いついた。次に、コードの関連するスニペットを示します。私はプロジェクトにcodeigniterを使用しています。ギアマンサーバーは配列として格納されています。接続がnullの場合はジョブコードでテストし、そうであればランダムなギアマンサーバーを使用して再確立します。誰かが何か改善された洞察力を持っていれば、私は非常に感謝していますので、これはうんざりだと確信しています。

class Net_Gearman_Job_notification_vc_friends_new_user extends Net_Gearman_Job_Common{

private $CI;

function __construct(){
    $this->CI =& get_instance();

    if(!$this->conn){

        $gearman = $this->CI->config->item('gearman');
        $servers = $gearman['servers'];
        $key = array_rand($servers);            
        $this->conn = Net_Gearman_Connection::connect($servers[$key]);

    }
}
ベストアンサー

理解した!かなり愚かな実際には、電話を忘れた parent :: __ construct();私のコンストラクタで…
oops。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です