При использовании PHP / Net_Gearman рабочие, выполняющие задания, вызываемые от других рабочих, перестают отвечать

#php #gearman #worker

#php #gearman #рабочий

Вопрос:

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

Кто-нибудь знает, что может происходить? Является ли это особенностью gearman?

Редактировать:

Кроме того, если я перезапущу своих рабочих, они повторят задачу, которая была поставлена в очередь другим рабочим. 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 =amp; 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:

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