将zookeeper curator与SSM项目进行整合(重点)

第一步:在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();
		}
		
	}
	
	
	
}

猜你喜欢

转载自blog.csdn.net/Richard_666/article/details/85109860