zookeeper提供了很方便的管理工具,同步API也很方便使用,本文主要介绍以下几个API的用法。
1. zookeeper初始化
zhandle_t *zookeeper_init(const char *host, watcher_fn fn, int recv_timeout, const clientid_t *clientid, void *context, int flags);功能:
创建一个句柄(handle)和一个响应(response)这个句柄的会话(session)。
参数:
host:zookeeper主机列表,用逗号间隔。
fn:用于监视的回调函数。
clientid:之前建立过连接,现在要重新连的客户端(client)ID。如果之前没有,则为0.
context:暂时用不到,忽略。(TODO)
flags:设置为0,zookeeper开发团队保留以后使用。
2. 监视节点是否存在
int zoo_exists(zhandle_t *zh, const char *path, int watch, struct Stat *stat);
功能:
同步监视一个zookeeper节点(node)是否存在。
参数:
zh:zookeeper的句柄,由zookeeper_init得到。
path:节点名称,就是一个类似于文件系统写法的路径。
watch:设置为0,则无作用。设置为非0时,暂时用不到,忽略。(TODO)
stat:(TODO)
返回值:ZOK,ZNONODE,ZNOAUTH,ZBADARGUMENTS,ZINVALIDSTATE,ZMARSHALLINGERROR。ZOK表示操作成功,ZNONODE表示该节点不存在,ZNOAUTH表示客户端(client)无权限,ZINVALIDSTATE表示存在非法的参数,后两者暂略(TODO)。
3. 新建zookeeper节点
int zoo_create(zhandle_t *zh, const char *path, const char *value, int valuelen, const struct ACL_vector *acl, int flags, char *path_buffer, int path_buffer_len);
功能:
创建一个同步的zookeeper节点。
参数:
zh:zookeeper的句柄,由zookeeper_init得到。
path:节点名称,就是一个类似于文件系统写法的路径。
value:欲存储到该节点的数据。如果不存储数据,则设置为NULL。
valuelen:欲存储的数据的长度。如果不存储数据,则设置为-1.
acl:初始的ACL节点,ACL不能为空。比如设置为&ZOO_OPEN_ACL_UNSAFE。(TODO)
flags:一般设置为0.(TODO)
path_buffer:将由新节点填充的路径值。可设置为NU