Springboot整合Zookeeper

168 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第16天,点击查看活动详情

今天说下Springboot整合Zookeeper,代码很简陋,但是可以连接上,哈哈;

首先还是最基础的导入pom文件将Zookeeper的jar引入进来,刷新maven;

<dependency>   
 <groupId>org.apache.zookeeper</groupId>   
 <artifactId>zookeeper</artifactId> 
   <version>3.6.2</version>   
 <exclusions>       
<exclusion>      
      <groupId>org.slf4j</groupId>   
         <artifactId>slf4j-log4j12</artifactId>  
      </exclusion>   
 </exclusions>
</dependency>

引入进来后我们要写个配置方法这个随便你写啦,获取到对象就行了,网上都是简单的一个demo,花里胡哨,我就抄了一个过来;

首先我们在yaml文件里配置Zookeeper的服务地址;并给上一个连接的超时时间,然后在配置类中读取他们;

定义个对象private static ZooKeeper zkClient;

zkClient = new ZooKeeper(address, timeout, new Watcher() {    
@Override    
public void process(WatchedEvent watchedEvent) {       
 if (watchedEvent.getState() == Event.KeeperState.SyncConnected) {            
log.info("连接成功");        
}    }});
System.out.println("zookeeper初始化状态" + zkClient.getState());

创建该zk的对象,下面我们再写个方法get这个请求就表示我们取到了这个对象,这里我们可以加个bean,表示启动时候就加载这个方法,那我们在启动成功的时候查看日志,看有没有打连接成功,如果没有,我们就要看下端口是否打开了,我们可以用Telnet试试先,然后如果是云服务器的话,要看下安全组是否配置了,以及这个安全组配置的是不是你的那个实例下的(别问为啥说这么多,说就是被这个坑了很长时间),这里也说下,不要关闭防火墙,不要,你要是虚拟机关就关了,云服务器不要关,防火墙造出来不是让你关的,我不理解网上很多方案为啥全是让关防火墙的;开端口不清楚的可以看我之前的文章(我是阿里云);

连接成功后我们要写我们的业务逻辑层了,工具方法也去网上百度吧,我写了个exists和get的方法用于验证;

System.out.println("wode "+ZooKeeper.getZkBean().exists("/m1",true));
byte[] data = ZooKeeper.getZkBean().getData("/m1", new Watcher() {    
@Override    
public void process(WatchedEvent watchedEvent) {        
    }}, 
new Stat());
log.info(new String(data));

这里注意我上面的exists方法,存在会返回个stat对象(状态),不存在返回null;

response.getStat().getCzxid() == -1 ? null : response.getStat();

下面的get我们可以获取该节点对应的值,比如我存了个“/m1”,查出来就是newm2

这样就可以看到我们的内容啦,*下面的那一大串是节点的状态信息,不必考虑;

好啦,现在,连上了项目,下面我们要一点一点往上加buff了;再说一句云服务不要关闭防火墙