欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java連接zookeeper的3種方式小結(jié)

 更新時(shí)間:2021年11月11日 09:02:39   作者:碼眼  
這篇文章主要介紹了java連接zookeeper的3種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

java連接zookeeper3種方式

1、使用zookeeper原始api

public class Demo { 
    private static String ip = "192.168.0.101:2181"; 
    private static int  session_timeout = 40000; 
    private static CountDownLatch latch = new CountDownLatch(1); 
    public static void main(String[] args) throws Exception {
        ZooKeeper zooKeeper = new ZooKeeper(ip, session_timeout, new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                if(watchedEvent.getState() == Event.KeeperState.SyncConnected) {
                    //確認(rèn)已經(jīng)連接完畢后再進(jìn)行操作
                    latch.countDown();
                    System.out.println("已經(jīng)獲得了連接");
                }
            }
        });
 
        //連接完成之前先等待
        latch.await();
        ZooKeeper.States states = zooKeeper.getState();
        System.out.println(states);
    }
}

打?。?/p>

如果打印出來(lái)的狀態(tài)為 CONNECTED 則表示連接成功

2、使用ZkClient客戶(hù)端連接,這種連接比較簡(jiǎn)單

public class ZkClientTest { 
    private static String ip = "192.168.0.101:2181"; 
    private static int  session_timeout = 40000; 
    public static void main(String[] args) {
        ZkClient zkClient = new ZkClient(ip,session_timeout);
        System.out.println(zkClient.getChildren("/"));
    }
}

打印:

3、使用curator連接

 
public class CuratorDemo {  
    //ZooKeeper服務(wù)地址
    private static final String SERVER = "192.168.0.101:2181";
 
    //會(huì)話超時(shí)時(shí)間
    private static final int SESSION_TIMEOUT = 30000;
 
    //連接超時(shí)時(shí)間
    private static final int CONNECTION_TIMEOUT = 5000;
 
    /**
     * baseSleepTimeMs:初始的重試等待時(shí)間
     * maxRetries:最多重試次數(shù)
     *
     *
     * ExponentialBackoffRetry:重試一定次數(shù),每次重試時(shí)間依次遞增
     * RetryNTimes:重試N次
     * RetryOneTime:重試一次
     * RetryUntilElapsed:重試一定時(shí)間
     */
    private static final RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);  
    public static void main(String[] args) throws Exception {
        //創(chuàng)建 CuratorFrameworkImpl實(shí)例
        CuratorFramework client = CuratorFrameworkFactory.newClient(SERVER, SESSION_TIMEOUT, CONNECTION_TIMEOUT, retryPolicy);
 
        //啟動(dòng)
        client.start(); 
        System.out.println("連接成功!");
        Object o = client.getChildren().forPath("/");
        System.out.println(o);
    } 
}

打印:

Java集成zookeeper筆記

一、引入zookeeper-3.4.5.jar(原生zk包)

slf4j.jar即可,其他還有zkClient和Curator,其中Curator封裝的zk客戶(hù)端組件最好用。

二、手寫(xiě)ZookeeperBase.java

少?gòu)U話,上代碼:

簡(jiǎn)單的創(chuàng)建連接和增刪改查操作:

public class ZookeeperBase{
	//zk集群地址(端口號(hào)為客戶(hù)端端口號(hào))
	private static final String CONNECT_ADDR = "192.168.241.127:2181,192.168.241.128:2181,192.168.241.129:2181";	
	//session 超時(shí)時(shí)間,單位毫秒
	private static final int SESSION_OUTTIME = 5000;	
	//用于阻塞程序執(zhí)行,直到zk成功連接后再發(fā)送繼續(xù)執(zhí)行信號(hào),因?yàn)閦k建立連接是異步的,阻塞是防止程序在zk成功連接前被調(diào)用。
	private static final CountDownLatch contectedSemaphore = new CountDownLatch (1);	
	public static void main(String[] args)throws Exception{
		Zookeeper zk = new Zookeeper(CONNECT_ADDR,SESSION_OUTTIME,new Watcher()){
			@override
			public void process(WatcherEvent event){  //WatcherEvent為觀察者監(jiān)聽(tīng)事件
			
				//獲取事件狀態(tài)(與客戶(hù)端連接狀態(tài)相關(guān))
				/*
				* KeeperState:Disconneced        連接失敗 		 
				* KeeperState:SyncConnected	 連接成功	 		 
				* KeeperState:AuthFailed         認(rèn)證失敗		 
				* KeeperState:Expired            會(huì)話過(guò)期
				*/
				KeeperState keeperState = event.getState();
				
				//獲取事件類(lèi)型(與zknode相關(guān))
				/*
				* EventType:NodeCreated            節(jié)點(diǎn)創(chuàng)建		 
				* EventType:NodeDataChanged        節(jié)點(diǎn)的數(shù)據(jù)變更		 
				* EventType:NodeChildrentChanged   子節(jié)點(diǎn)下的數(shù)據(jù)變更		 
				* EventType:NodeDeleted            節(jié)點(diǎn)刪除
				* EventType:None                   剛連接什么都沒(méi)做
				*/
				EventType eventType  = event.getType();
				
				//成功建立連接(固定寫(xiě)法)
				if(KeeperState.SyncConnected == keeperState){
					if(EventType.None == eventType){
						//發(fā)送信號(hào)讓程序繼續(xù)執(zhí)行
						contectedSemaphore.countDown();
					}
				}				
			}
			
			//阻塞程序執(zhí)行
			contectedSemaphore.await();
			//創(chuàng)建節(jié)點(diǎn)
			//同步創(chuàng)建
			String newNode = zk.create("/testRoot","data".getBytes(),ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
			/*
			*參數(shù)1:節(jié)點(diǎn)路徑:/testRoot,原生api不允許遞歸創(chuàng)建節(jié)點(diǎn),即沒(méi)有父節(jié)點(diǎn)不允許直接連帶父子節(jié)點(diǎn)一起創(chuàng)建。創(chuàng)建節(jié)點(diǎn)是要寫(xiě)全路徑,例如:/testRoot/children。
			*參數(shù)2:節(jié)點(diǎn)內(nèi)容:內(nèi)容類(lèi)型為字節(jié)數(shù)組,不支持存儲(chǔ)序列化對(duì)象,例如不支持將java對(duì)象序列化為json存儲(chǔ),但可以使用java序列化框架,如hession或kyso。
			*參數(shù)3:權(quán)限控制:在對(duì)權(quán)限要求不嚴(yán)格情況下都使用OPEN_ACL_UNSAFE開(kāi)放權(quán)限即可。
			*參數(shù)4:節(jié)點(diǎn)類(lèi)型:提供了四種類(lèi)型。
			*PERSISTENT 持久化節(jié)點(diǎn)
			*PERSISTENT SEQUENTIAL 持久順序節(jié)點(diǎn)
			*EPHEMERAL 臨時(shí)節(jié)點(diǎn)
			*EPHEMERAL SEQUENTIAL 臨時(shí)順序節(jié)點(diǎn)
			*/
		};	
	} 	
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring 應(yīng)用上下文獲取 Bean 的常用姿勢(shì)實(shí)例總結(jié)

    Spring 應(yīng)用上下文獲取 Bean 的常用姿勢(shì)實(shí)例總結(jié)

    這篇文章主要介紹了Spring 應(yīng)用上下文獲取 Bean,結(jié)合實(shí)例形式總結(jié)分析了Spring 應(yīng)用上下文獲取 Bean的實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • 詳解springboot配置多個(gè)redis連接

    詳解springboot配置多個(gè)redis連接

    Spring Boot為Redis, MongoDB, Elasticsearch, Solr和Gemfire提供自動(dòng)配置。本文詳細(xì)介紹了springboot配置多個(gè)redis連接,有興趣的可以了解一下。
    2017-04-04
  • jdk17+springboot使用webservice的踩坑實(shí)戰(zhàn)記錄

    jdk17+springboot使用webservice的踩坑實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于jdk17+springboot使用webservice踩坑的相關(guān)資料,網(wǎng)上很多教程是基于jdk8的,所以很多在17上面跑不起來(lái),折騰兩天,直接給答案,需要的朋友可以參考下
    2024-01-01
  • 一篇超詳細(xì)的Spring Boot對(duì)jdbc支持的文章

    一篇超詳細(xì)的Spring Boot對(duì)jdbc支持的文章

    JdbcTemplate 是在JDBC API基礎(chǔ)上提供了更抽象的封裝,并提供了基于方法注解的事務(wù)管理能力。 通過(guò)使用SpringBoot自動(dòng)配置功能并代替我們自動(dòng)配置beans,下面給大家介紹spring boot中使用JdbcTemplate相關(guān)知識(shí),一起看看吧
    2021-07-07
  • MyBatis-Plus自動(dòng)化填充的踩坑記錄及解決

    MyBatis-Plus自動(dòng)化填充的踩坑記錄及解決

    這篇文章主要介紹了MyBatis-Plus自動(dòng)化填充的踩坑記錄及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • SpringBoot?jwt的token如何刷新

    SpringBoot?jwt的token如何刷新

    這篇文章主要給大家介紹了關(guān)于SpringBoot?jwt的token如何刷新的相關(guān)資料,Json web token(JWT)是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開(kāi)放標(biāo)準(zhǔn),需要的朋友可以參考下
    2023-07-07
  • SpringBoot配置Profile實(shí)現(xiàn)多環(huán)境支持

    SpringBoot配置Profile實(shí)現(xiàn)多環(huán)境支持

    這篇文章主要介紹了SpringBoot配置Profile實(shí)現(xiàn)多環(huán)境支持操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 解決spring boot hibernate 懶加載的問(wèn)題

    解決spring boot hibernate 懶加載的問(wèn)題

    這篇文章主要介紹了解決spring boot hibernate 懶加載的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • 解決SpringMvc中普通類(lèi)注入Service為null的問(wèn)題

    解決SpringMvc中普通類(lèi)注入Service為null的問(wèn)題

    這篇文章主要介紹了解決SpringMvc中普通類(lèi)注入Service為null的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java之SpringCloud Eurka注冊(cè)錯(cuò)誤解決方案

    Java之SpringCloud Eurka注冊(cè)錯(cuò)誤解決方案

    這篇文章主要介紹了Java之SpringCloud Eurka注冊(cè)錯(cuò)誤解決方案,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評(píng)論