ZooKeeper server &&client
写了一个关于zookeepeer应用的简单demo
服务端定时的向zookeeper集群注册,客户端监听zookeeper服务节点变化,一旦变化,立刻响应,更新服务端列表
服务端代码:
#include <zookeeper/zookeeper.h>
#include <zookeeper/zookeeper_log.h>
#include <iostream> using namespace std; zhandle_t* zkhandle = NULL;
const char* host = "10.7.18.31:2181,10.7.18.199:2181";
int timeout = ; void InitWatch(zhandle_t* zh, int type, int state, const char* path, void* watcher) {
if (type == ZOO_SESSION_EVENT) {
if (state == ZOO_CONNECTED_STATE) {
cout << "build connection ok" << endl;
} else if (state == ZOO_EXPIRED_SESSION_STATE) {
cout << "connection disconnect" << endl;
zkhandle = zookeeper_init(host, InitWatch, timeout, , const_cast<char*>("TODO"), );
}
}
} void CreateWatch(int rc, const char *name, const void *data) {
if (rc == ZNODEEXISTS || rc == ZOK) {
if (rc == ZOK) {
cout << "registry ok" << endl;
} else {
cout << "node exist" << endl;
}
} else {
cout << "registry error" << endl;
}
} int main(int argc, char* argv[]) {
zoo_set_debug_level(ZOO_LOG_LEVEL_WARN);
zhandle_t* zkhandle = NULL;
zkhandle = zookeeper_init(host, InitWatch, timeout, , const_cast<char*>("TODO"), );
if (NULL == zkhandle) {
cout << "zookeeper init error" << endl;
return ;
}
while () {
int ret = zoo_acreate(zkhandle, "/cluster/index+endpoint", "", , &ZOO_OPEN_ACL_UNSAFE, ZOO_EPHEMERAL, CreateWatch, "create");
if (ret) {
cout << "zoo_acreate error :" << ret << endl;
}
sleep();
} zookeeper_close(zkhandle); return ;
}
client
#include <zookeeper/zookeeper.h>
#include <zookeeper/zookeeper_log.h>
#include <iostream> using namespace std; const char* host = "10.7.18.31:2181,10.7.18.199:2181";
const int timeout = ;
zhandle_t* zkhandle = NULL; void InitWatch(zhandle_t* zh, int type, int state, const char* path, void* watcher) {
if (type == ZOO_SESSION_EVENT) {
if (state == ZOO_CONNECTED_STATE) {
cout << "build connection ok" << endl;
} else if (state == ZOO_EXPIRED_SESSION_STATE) {
cout << "connection disconnect" << endl;
zkhandle = zookeeper_init(host, InitWatch, timeout, , const_cast<char*>("TODO"), );
}
}
} void ChildWatch(zhandle_t* zh, int type, int state, const char* path, void* watcher) {
if (type == ZOO_CHILD_EVENT) {
struct String_vector str_vec;
int ret = zoo_wget_children(zh, "/cluster", ChildWatch, , &str_vec);
if (ret) {
cout << "zoo_wget_children error :" << ret << endl;
}
cout << "endpoint change: " << endl;
for (int i = ; i < str_vec.count; ++i) {
string endpoint = str_vec.data[i];
cout << endpoint << endl;
}
}
} int main(int argc, char* argv[]) {
zoo_set_debug_level(ZOO_LOG_LEVEL_WARN);
if (zkhandle) {
zookeeper_close(zkhandle);
}
zkhandle = zookeeper_init(host, InitWatch, timeout, , const_cast<char*>("TODO"), );
if (NULL == zkhandle) {
cout << "zookeeper init error" << endl;
return ;
}
while () {
struct String_vector str_vec;
int ret = zoo_wget_children(zkhandle, "/cluster", ChildWatch, const_cast<char*>(""), &str_vec);
if (ret) {
cout << "zoo_wget_children error :" << ret << endl;
}
for (int i = ; i < str_vec.count; ++i) {
string endpoint = str_vec.data[i];
cout << "init endpoint :" << endpoint << endl;
}
sleep();
} zookeeper_close(zkhandle);
}
ZooKeeper server &&client的更多相关文章
- zookeeper中client命令实践
Welcome to ZooKeeper! 2016-09-14 16:06:04,528 [myid:] - INFO [main-SendThread(master:2181):ClientCnx ...
- NetMQ(ZeroMQ)Client => Server => Client 模式的实现
ØMQ (也拼写作ZeroMQ,0MQ或ZMQ)是一个为可伸缩的分布式或并发应用程序设计的高性能异步消息库.它提供一个消息队列, 但是与面向消息的中间件不同,ZeroMQ的运行不需要专门的消息代理(m ...
- docker报Error response from daemon: client is newer than server (client API version: 1.24, server API version: 1.19)
docker version Client: Version: 17.05.0-ce API version: 1.24 (downgraded from 1.29) Go version: go1. ...
- Zookeeper之Zookeeper的Client的分析【转】
Zookeeper之Zookeeper的Client的分析 1)几个重要概念 ZooKeeper:客户端入口 Watcher:客户端注册的callback ZooKeeper.SendThread: ...
- org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within
org.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within timeo ...
- Unable to connect to zookeeper server within timeout: 5000
错误 严重: StandardWrapper.Throwable org.springframework.beans.factory.BeanCreationException: Error crea ...
- 线上zk节点报org.apache.zookeeper.server.NIOServerCnxnFactory.run(NIOServerCnxnFactory.java:187) at java.lang.Thread.run(libgcj.so.10)
线上zk做配置管理,最近突然发现两个节点一直在刷下边 java.nio.channels.CancelledKeyException at gnu.java.nio.SelectionKeyIm ...
- Redis2.2.2源码学习——Server&Client链接的建立以及相关Event
Redis中Server和User建立链接(图中的client是服务器端用于描述与客户端的链接相关的信息) Redis Server&Client链接的建立时相关Event的建立(图中的cli ...
- Socket编程--基础(基本server/client实现)
IPv4套接口地址结构 IPv4套接口地址结构通常也称为“网际套接字地址结构”,它以“sockaddr_in”命名,定义在头文件中 LINUX结构下的常用结构,一般创建套接字的时候都要将这个结构里面的 ...
随机推荐
- 【rabbitmq消息队列配置】
#erlang语言支持包 #rabbitmq-server安装支持 #添加用户 #删除用户 #用户角色 #启动 #登录 #管理界面 #guest登录不了: Rabbitmq.conf文件添加 #开启管 ...
- 帝国cms发布信息时替换正文IMG图片标签里的ALT内容
帝国cms发布信息时替换正文IMG图片标签里的ALT内容 在 e/class/userfun.php 里面增加 //替换正文IMG里的ALT内容 function user_imgalt($mid,$ ...
- Flink+Kafka整合的实例
Flink+Kafka整合实例 1.使用工具Intellig IDEA新建一个maven项目,为项目命名为kafka01. 2.我的pom.xml文件配置如下. <?xml version=&q ...
- (待整理)flume操作----------hivelogsToHDFS案例----------运行时,发生NoClassDefFoundError错误
1. 2.错误日志 命令为 bin/flume-ng agent --name a2 --conf conf/ --conf-file job/file-hdfs.conf Info: Sourcin ...
- [Jmeter]jmeter之BeanShell Sampler测试应用
前言: 在做接口测试的时候,有些接口做了签名校验,而签名是根据某算法进行加密,这时候,简单的接口测试工具无法完成该工作,所以想到了Jmeter,他是java编写,有强大的扩展性,足矣完成我们需要的操作 ...
- LeetCode: 59. Spiral Matrix II(Medium)
1. 原题链接 https://leetcode.com/problems/spiral-matrix-ii/description/ 2. 题目要求 给定一个正整数n,求出从1到n平方的螺旋矩阵.例 ...
- Linker加载so失败问题分析
WeTest 导读 近期测试反馈一个问题,在旧版本微视基础上覆盖安装新版本的微视APP,首次打开拍摄页录制视频合成时高概率出现crash. 那么我们直奔主题,看看日志: 另外复现的日志中还出现如下信息 ...
- java中的比较:instanceof、equals(hashcode)、==
import javassist.expr.Instanceof; class Person{ String s; Person(String s){ this.s=s; } } class Man ...
- Windows运行机理——主程序—WinMain
Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 在windows 操作系统下,用C 或者C++来编写MS-DOS 应用 ...
- python 定位文件目录
经常有引用文件的地方,所以整理了一下如何定位文件目录的方法 定位当前文件的目录 import os file_path = os.path.dirname(__file__) 定位当前文件的父目录 i ...