1. 统一配置中心
在分布式集群系统中,经常要对某个配置信息进行修改,若一台一台对服务器进行修改,非常浪费时间,假如服务的体量非常大,几十台上百台甚至上千台服务器进行修改的话,几乎很不现实。zookeeper通过对节点数据进行监听,一旦配置信息发生变化,立马通知所有的客户端对数据进行重新读取。
下面通过Java代码的方式对统一配置中心进行简单的实现。
1.1 客户端
package cn.tianqb.zookeeper;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooKeeper;
import java.util.concurrent.CountDownLatch;
/**
* @Description: 客户端
* @Author tianqb
* @Mail tianqingbo@tianqb.cn
* @Date 2020/5/21 20:26
* @Version v1.0
*/
public class ZKClient {
public ZooKeeper zooKeeper;
public CountDownLatch countDownLatch = new CountDownLatch(1);
// zookeeper服务器地址
private String IP;
// 会话超时时间
private Integer SESSION_TIME_OUT;
// url信息
private String URL_PATH;
// 用户名信息
private String USER_PATH;
// 密码信息
private String PASSWD_PATH;
public ZKClient(String IP, Integer SESSION_TIME_OUT, String URL_PATH, String USER_PATH, String PASSWD_PATH) {
this.IP = IP;
this.SESSION_TIME_OUT = SESSION_TIME_OUT;
this.URL_PATH = URL_PATH;
this.USER_PATH = USER_PATH;
this.PASSWD_PATH = PASSWD_PATH;
init();
}
/**
* 连接至服务器
*/
private void init() {
ZKWatcher watcher = new ZKWatcher(countDownLatch, this);
try {
zooKeeper = new ZooKeeper(IP, SESSION_TIME_OUT, watcher);
countDownLatch.await();
pull();
} catch (Exception e) {
e.printStackTrace();
}
}
public void close() {
try {
zooKeeper.close();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 接到通知重新拉取数据
*/
public void pull() {
ZKWatcher watcher = new ZKWatcher(countDownLatch, this);
try {
System.out.println("客户端" + zooKeeper.getSessionId() + "---url:" + new String(zooKeeper.getData(URL_PATH, watcher,
null)));
System.out.println("客户端" + zooKeeper.getSessionId() + "---user:" + new String(zooKeeper.getData(USER_PATH, watcher,
null)));
System.out.println("客户端" + zooKeeper.getSessionId() + "---passwd:" + new String(zooKeeper.getData(PASSWD_PATH, watcher,
null)));
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
1.2 常量
package cn.tianqb.zookeeper;
/**
* @Description: 常量
* @Author tianqb
* @Mail tianqingbo@tianqb.cn
* @Date 2020/5/21 20:34
* @Version v1.0
*/
public class ZKConstant {
// zookeeper服务器地址
public static final String IP = "192.168.100.1