php zookeeper 使用,PHP中zookeeper的类与方法

本文详细介绍了如何使用PHP的Zookeeper API进行各种操作,包括构造连接、创建节点、设置和获取数据、监听事件、设置权限等。通过示例代码展示了如何创建临时节点、有序节点、设置超时和回调函数,并解释了版本控制和权限设置的重要性。

__construct( $host = ‘‘, $watcher_cb = null, $recv_timeout = 10000)

$host:zookeeper的ip和端口,多组信息使用,分隔

$watcher_cb:全局监听函数,任何的监听都会执行该回调函数

$recv_timeout:会话超时,在zookeeper的服务器中可以设置 minSessionTimeout和maxSessionTimeout,限制客户端设置session的超时范围

$zookeeper = new Zookeeper("192.168.80.121:2181,192.168.80.122:2181,

192.168.80.123:2181",'globalWatcher',5000);

$zookeeper->get('/redis','redisWatcher');

$zookeeper->get('/rabbit','rabbitWatcher');

function globalWatcher(){

echo "global watcher\n";

}

function redisWatcher(){

echo "redis watcher\n";

$GLOBALS['zookeeper']->get('/redis','redisWatcher');

}

function rabbitWatcher(){

echo "rabbit watcher\n";

$GLOBALS['zookeeper']->get('/rabbit','rabbitWatcher');

}

while (true) {

echo "\n";

sleep(2);

}

######################

#在zookeeper的cli中执行 set /rabbit abc 和 set /redis abc

global watcher

rabbit watcher

global watcher

redis watche

connect( $host, $watcher_cb = null, $recv_timeout = 10000)

参考:__construct

create( $path, $value, $acl, $flags = null )

格式:$acl = [['scheme'=>'world', 'id'=>'anyone', 'perms'=>Zookeeper::PERM_ALL]];

#为什么这里是二维数组,暂时没有搞明白,也许是为了设置多组不同的权限吧

在PHP中permission中,有以下5种,分别对应文中的读、写、增、删、管理以及全部。

const PERM_READ   = 1;

const PERM_WRITE  = 2;

const PERM_CREATE = 4;

const PERM_DELETE = 8;

const PERM_ADMIN  = 16;

const PERM_ALL    = 31;

在PHP中的$flags,有以下两种,这里有个比较特别的写法需要注意

const EPHEMERAL = 1; #临时节点

const SEQUENCE  = 2; #有序节点

Zookeeper::EPHEMERAL | Zookeeper::SEQUENCE #特别注意:临时的且有序的节点

# 距离说明

$acl = [['scheme'=>'world', 'id'=>'anyone', 'perms'=>Zookeeper::PERM_ALL]];

$znode = $zookeeper->create('/redis01','abc',$acl);

//默认是创建永久节点

$znode = $zookeeper->create('/redis02','abc',$acl,Zookeeper::EPHEMERAL);

//创建临时节点,但在你脚本结束后,马上删除,在cli中使用ls 看不到该节点

$znode = $zookeeper->create('/redis03','abc',$acl,Zookeeper::SEQUENCE);

//创建永久的有序节点

$znode = $zookeeper->create('/redis04','abc',$acl,Zookeeper::EPHEMERAL |

Zookeeper::SEQUENCE);

//创建临时有序节点,同样在ls看不到

// 如果想要在cli中看到临时节点,可以在脚本sleep(10),10秒内在cli中可以看到临时节点

delete( $path, $version = -1 )

$version:会进行version检查,如下表中节点/wanda的数据版本6,可采用delete(‘/wanda’,6)来删除,如果使用非6的版本,则删除失败。

#使用get获得的节点信息

abc

cZxid = 0x20000014c

ctime = Wed Feb 08 08:49:05 UTC 2017

mZxid = 0x200000152

mtime = Wed Feb 08 08:52:53 UTC 2017

pZxid = 0x20000014c

cversion = 0

dataVersion = 6

aclVersion = 0 //acl版本,在setAcl中会使用到

ephemeralOwner = 0x0

dataLength = 3

numChildren = 0

set( $path, $data, $version = -1, &$stat = null )

$version:参考delete方法

$stat:在设置时,同时返回节点信息

$znode = $zookeeper->set('/redis','abc',-1,$stat);

var_dump($znode);

var_dump($stat);

get( $path, $watcher_cb = null, &$stat = null, $max_size = 0)

$watcher_cb:get后的回调函数

$stat:参考set方法

$max_size:返回最大字符长度

$znode = $zookeeper->get('/redis',null,$stat); //返回abc

$znode = $zookeeper->get('/redis',null,$stat,1); //返回a

var_dump($znode);

var_dump($stat);

getChildren( $path, $watcher_cb = null )

exists( $path, $watcher_cb = null )

getAcl( $path )

setAcl( $path, $version, $acls )

$version:参考:delete方法

$acl = [['scheme'=>'world', 'id'=>'anyone', 'perms'=>Zookeeper::PERM_ALL]];

$znode = $zookeeper->setAcl('/redis',-1,$acl); //不指定ACL版本

$znode = $zookeeper->setAcl('/redis',4,$acl); //指定ACL版本

getClientId( )

setWatcher( $watcher_cb )

getState( )

返回当前客户端链接zookeeper的状态。成功返回1,失败返回false

getRecvTimeout( )

addAuth( $scheme, $cert, $completion_cb = null )

待补充

isRecoverable( )

setLogStream( $file )

getResultMessage( )

setDebugLevel( $level )

设置日志级别,在PHP中有四种级别

const LOG_LEVEL_ERROR = 1;

const LOG_LEVEL_WARN  = 2;

const LOG_LEVEL_INFO  = 3;

const LOG_LEVEL_DEBUG = 4;

setDeterministicConnOrder( $trueOrFalse )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值