Gearman с PHP / Net_Gearman, работники, выполняющие задания, которые вызываются другими работниками, перестают отвечать - PullRequest
1 голос
/ 13 ноября 2011

Я использую gearman для распределения долгосрочных задач по нескольким рабочим серверам. Для одной из моих рабочих задач я пытаюсь вызвать другую фоновую работу. Фоновое задание успешно выполняется другим работником ... но этот рабочий процесс не отвечает ни на какие новые задания, которые впоследствии добавляются в gearman.

Кто-нибудь знает, что может происходить? Это особенность редуктора?

EDIT:

Кроме того, если я перезапускаю своих работников, они повторяют задачу, поставленную в очередь другим работником. Похоже, что Gearman не распознает, что задание выполнено.

РЕДАКТИРОВАТЬ 2:

пробовал:

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

Внутри рабочей функции, которая вызывается из моего другого работника. Это вывод, который я получаю:

NULL
string(0) ""

РЕДАКТИРОВАТЬ 3:

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

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]);

    }
}

1 Ответ

0 голосов
/ 14 ноября 2011

Разобрался!на самом деле довольно глупо, забыл вызвать parent :: __ construct ();в моем конструкторе ... упс.

...