2

我目前正在使用标准绑定(此处的文档)将 Gearman 与 PHP 结合使用。一切正常,但我有一个小问题,无法检测到对 GearmanClient::addServer (此处的文档)的调用何时“成功”,我的意思是......

问题是添加服务器不会尝试任何套接字 I/O,这意味着服务器可能实际上不存在或无法运行。这意味着后续代码调用(在服务器实际上不存在的情况下)失败并导致 PHP 警告

有什么方法,或者最好的方法是在添加之前或之后确认 Gearman 守护程序在服务器上运行吗?

我想实现这一点,以便我可以可靠地处理 Gearman 可能已经死亡或服务器可能无法联系的情况。

非常感谢。

4

2 回答 2

0

我们首先通过手动调用fsockopen传递给的主机和端口来尝试这样做addServer,但事实证明这会留下很多挂起的连接,因为 Gearman 服务器希望通过该套接字发生一些事情。

我们使用监控脚本来检查守护进程及其工作人员的状态——类似于Google Groups 上的 perl 脚本。我们修改了脚本以在守护程序未运行时重新启动它。

如果这没有吸引力,请查看Gearman 协议(特别是上面线程中引用的“管理协议”部分)并使用该status命令。这将为您提供有关作业和工作人员状态的信息,但也意味着您可以执行与守护程序的套接字连接而不会让它挂起。

于 2012-01-02T16:46:05.813 回答
0

你可以使用这个库:https ://github.com/necromant2005/gearman-stats 它没有外部依赖。

$adapter = new \TweeGearmanStat\Queue\Gearman(array(
    'h1' => array('host' => '10.0.0.1', 'port' => 4730, 'timeout' => 1),
    'h2' => array('host' => '10.0.0.2', 'port' => 4730, 'timeout' => 1),
));
$status = $adapter->status();
var_dump($status);
于 2016-11-03T18:28:05.993 回答