Я использую 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]);
}
}