我正在使用 gearman 在多个工作服务器之间分配长时间运行的任务。对于我的一个工作任务,我尝试调用另一个后台作业。后台作业由另一个工作人员成功执行......但是该工作进程不响应之后添加到 gearman 的任何新工作。
有谁知道可能会发生什么?这是gearman的功能吗?
编辑:
此外,如果我重新启动我的工人,他们会重复其他工人排队的任务。Gearman 似乎没有意识到工作已经完成。
编辑2:
试过:
var_dump($this->conn);
var_dump($this->handle);
从我的其他工作人员调用的工作人员函数中。这是我收到的输出:
NULL
string(0) ""
编辑 3:
好吧,我想出了一个hackey方法来解决这个问题。以下是相关的代码片段。我正在为我的项目使用 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]);
}
}