將zookeeper curator與SSM專案進行整合(重點)
阿新 • • 發佈:2018-12-26
第一步:在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(); } } }