《zooker入门系列教程》:
1 - 如何在单机上实现ZooKeeper伪机群/伪集群部署
2 - 解读zookeeper的配置项
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:将由新节点填充的路径值。可设置为NULL。(TODO)
path_buffer_len:path_buffer的长度。
返回值:ZOK,ZNONODE,ZNODEEXISTS,ZNOAUTH,ZNOCHILDRENFOREPHEMERALS,ZBADARGUMENTS,ZINVALIDSTATE,ZMARSHALLINGERROR。ZOK表示操作成功,ZNONODE表示该节点不存在,ZNODEEXISTS表示节点已经存在,ZNOAUTH表示客户端(client)无权限,ZNOCHILDRENFOREPHEMERALS表示不能够创建临时(ephemeral)节点的子节点(children),ZINVALIDSTATE表示存在非法的参数,后两者暂略(TODO)。
4. 设置zookeeper节点
int zoo_set(zhandle_t *zh, const char *path, const char *buffer, int buflen, int version);
功能:
向zookeeper节点写数据。
参数:
zh:zookeeper的句柄,由zookeeper_init得到。
path:节点名称,就是一个类似于文件系统写法的路径。
buffer:欲写的数据。buflen:欲写的数据的长度。
version:检查这个节点的版本是否为version。当设置为-1时,不会进行版本检查。(TODO)
5. 获取某节点的子节点
int zoo_wget_children(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, struct String_vector *strings);
功能:
同步列出一个节点的所有子节点。
参数:
zh:zookeeper的句柄,由zookeeper_init得到。
path:节点名称,就是一个类似于文件系统写法的路径。
watcher:若设置为非0,则zookeeper服务器(server)会设置一个监视器,用来在节点发生改变时通知客户端(client)。
watcherCtx:传送给watcher作为回调的具体用户数据(user specific data)。
strings:用来保存得到的子节点路径。
返回值:ZOK,ZNONODE,ZNOAUTH,ZBADARGUMENTS,ZINVALIDSTATE,ZMARSHALLINGERROR。