问题:使用zookeeper集群时候,当其中一台主机停止服务,再次请求过程中会不定期出现 Connection Loss 问题
原因:php- zookeeper 资源没有获得链接,就调用相关操作(比如create 等)
解决办法:通过链接状态进行判断,当链接建立之后再进行操作
链接状态:
Zookeeper::EXPIRED_SESSION_STATE; //-112
Zookeeper::AUTH_FAILED_STATE; // -113
Zookeeper::CONNECTING_STATE; //1
Zookeeper::ASSOCIATING_STATE; //2
Zookeeper::CONNECTED_STATE; //3
Zookeeper::READONLY_STATE; // 在php-zookeeper 0.7.2中没有该状态
Zookeeper::NOTCONNECTED_STATE; //999
使用:
$path = "/learn";
$zk = new \Zookeeper('192.168.3.111:2181,192.168.3.112:2181,192.168.3.113:2181');
// 注意:此处只为演示,实际使用应加入其他控制条件,比如2秒内链接不上就需要break,同时抛出异常
while (true) {
$status = $zk->getState();
if ($status == \Zookeeper::CONNECTED_STATE) {
break;
}
}
try {
if (!$zk->exists($path)) {
// TODU
}
echo $zk->get($path);
} catch (\Exception $e) {
// TODU
}
网友评论