#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(); в моем конструкторе … упс.