zookeeper学习之一

来源:互联网 发布:js基本数据类型有哪些 编辑:程序博客网 时间:2024/06/11 22:25

zookeeper 学习

关于 zookeeper监控

当监控的节点下面数据 增加或者减少。 客户端可以通过监控第一时间观察到节点变化,可用于集群的负载均衡作用。新机器加入的时候在 zk里面添加节点,watcher可以观察到,出现宕机情况,客户端也可以收到信息,避免向 该服务端发起请求。

测试代码如下

package zookeeper.zookeeper;import org.apache.log4j.Logger;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.Watcher.Event.EventType;import org.apache.zookeeper.ZooDefs.Ids;import org.apache.zookeeper.ZooKeeper;import org.slf4j.LoggerFactory;/** * Hello world! *  */public class ZookeeperContext {protected static org.slf4j.Logger logger = LoggerFactory.getLogger("zk");public final int SESSION_TIME_OUT = 2000;public ZooKeeper zk;/** * 判断zk的链接链接状态 * */public boolean isConnected() {return zk.getState() == ZooKeeper.States.CONNECTED;}/** * 创建zk链接 * @return  * **/public  ZookeeperContext(String connectString) {try {/** * connectString 链接zookeeper的Ip和端口,多个用逗号隔开例如: * 10.0.0.104:2181,10.0.0.105:2181 sessionTimeout * 客户端和zookeeper链接断开后,数据最长保存的时间 watcher 监控回调,服务器数据修改会回调 */zk = new ZooKeeper(connectString, SESSION_TIME_OUT,new ZookeeperWatcher());} catch (Exception e) {e.printStackTrace();}}/** * zk监听,如果服务器端有什么变化到这里接收 并继续添加监听 * */public class ZookeeperWatcher implements Watcher {public void process(WatchedEvent event) {try {if (null != event.getPath()) {System.out.println(event);if (event.getType() == EventType.NodeChildrenChanged) {zk.getChildren(event.getPath(), true).get(1);byte[] bytes = zk.getData("/root/hpgary", null, null);  System.out.println(new String(bytes));System.out.println(zk.getChildren(event.getPath(), true)+"11");} else {zk.getData(event.getPath(), true, null);System.out.println(zk.getData(event.getPath(), true, null));}}} catch (Exception e) {e.printStackTrace();}}}/** * 在zk创建数据 * */public void setData(String path, byte[] data, CreateMode createMode) {try {if (zk.exists(path, false) == null) {zk.create(path, data, Ids.OPEN_ACL_UNSAFE, createMode);} else {zk.setData(path, data, -1);}zk.getChildren(path, true);} catch (Exception e) {logger.error("setData", e);}}public static void main(String[] args) throws Exception {ZookeeperContext context = new ZookeeperContext("192.168.80.103:2181");while (!context.isConnected()) {Thread.sleep(3000);}context.setData("/root", "1".getBytes(), CreateMode.PERSISTENT);System.out.println("1执行完了");context.setData("/root/hpgary", "gg".getBytes(), CreateMode.EPHEMERAL);System.out.println("2执行完了"); System.in.read();System.out.println("end");}}


原创粉丝点击