1. 程式人生 > >將zookeeper curator與SSM專案進行整合(重點)

將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();
		}
		
	}
	
	
	
}