第一步:在spring容器里面新增application-zookeeper.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
<description>zookeeper 放入spring容器,项目启动加载的时候就建立和zookeeper的链接</description>
<!-- 第一步:创建重连的策略 -->
<bean id="retryPolicy" class="org.apache.curator.retry.ExponentialBackoffRetry">
<!-- 构造方法的第一个参数,每次重试连接的等待时间 -->
<constructor-arg index="0" value="1000"></constructor-arg>
<!-- 构造方法的第二个参数,设置的重连的次数 -->
<constructor-arg index="1" value="5"></constructor-arg>
</bean>
<!-- 第二步:创建zookeeper客户端 -->
<bean id="client" class="org.apache.curator.framework.CuratorFrameworkFactory"
factory-method="newClient" init-method="start">
<!-- 方法的第一个参数,这个要写安装zookeeper的服务器的ip -->
<constructor-arg index="0" value="192.168.4.245:2181"></constructor-arg>
<!-- 方法的第二个参数,会话的超时时间 -->
<constructor-arg index="1" value="10000"></constructor-arg>
<!-- 方法的第三个参数,连接的超时时间 -->
<constructor-arg index="2" value="10000"></constructor-arg>
<!-- 方法的第三个参数,重试的策略 -->
<constructor-arg index="3" ref="retryPolicy"></constructor-arg>
</bean>
<!-- 第三步:客户端配置,将自定义的类引进来-->
<bean id="ZookeeperCurator" class="com.lpy.web.util.ZookeeperCurator">
<constructor-arg index="0" ref="client"></constructor-arg>
</bean>
</beans>
第二步:书写帮助类
package com.lpy.web.util;
import org.apache.curator.framework.CuratorFramework;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.ZooDefs.Ids;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ZookeeperCurator {
//zookeeper客户端
private CuratorFramework client =null;
//日志(中间件的工具类都需要添加日志)
final static Logger log=LoggerFactory.getLogger(ZookeeperCurator.class);
//初始化 参数的client是在applicationContext-zookeeper.xml容器里面,通过配置进行赋值的
public ZookeeperCurator(CuratorFramework client) {
this.client=client;
}
//初始化
public void init() {
//设置命名空间
client = client.usingNamespace("admin");
try {
//判断在admin命名空间下是否有bgm节点 /admin/bgm
if(client.checkExists().forPath("/bgm")==null) {
/**
* 对于zookeeper来讲,有2种类型的节点
* 持久节点:当你创建一个节点的时候,这个节点就永远存在了,除非你手动删除
* 临时节点:创建一个节点之后,会话断开,会自动删除,当然也可以手动删除
*/
//函数式编程
client.create().creatingParentsIfNeeded() //创建节点
.withMode(CreateMode.PERSISTENT) //节点类型:持久节点
.withACL(Ids.OPEN_ACL_UNSAFE) //acl:匿名权限
.forPath("/bgm");
log.info("zookeeper初始化成功");
log.info("zookeeper服务器状态:{0}",client.isStarted());
}
} catch (Exception e) {
log.error("zookeeper客户端连接、初始化错误");
e.printStackTrace();
}
}
/**
* 增加或者删除bgm,向zookeeper-server创建子节点,供小程序后端监听
* @param bgmId
* @param operType
*/
public void sendBgmOperator(String bgmId,String operType) {
try {
client.create().creatingParentsIfNeeded() //创建节点
.withMode(CreateMode.PERSISTENT) //节点类型:持久节点
.withACL(Ids.OPEN_ACL_UNSAFE) //acl:匿名权限
.forPath("/bgm"+bgmId,operType.getBytes());
} catch (Exception e) {
e.printStackTrace();
}
}
}