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

SpringBoot集成Curator實(shí)現(xiàn)Zookeeper基本操作的代碼示例

 更新時(shí)間:2024年05月14日 10:47:38   作者:Java畢設(shè)王  
Zookeeper是一個(gè)Apache開源的分布式的應(yīng)用,為系統(tǒng)架構(gòu)提供協(xié)調(diào)服務(wù),ZooKeeper的目標(biāo)就是封裝好復(fù)雜易出錯(cuò)的關(guān)鍵服務(wù),將簡(jiǎn)單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶,本文給大家介紹了SpringBoot集成Curator實(shí)現(xiàn)Zookeeper基本操作,需要的朋友可以參考下

Zookeeper是一個(gè)Apache開源的分布式的應(yīng)用,為系統(tǒng)架構(gòu)提供協(xié)調(diào)服務(wù)。從設(shè)計(jì)模式角度來審視:該組件是一個(gè)基于觀察者模式設(shè)計(jì)的框架,負(fù)責(zé)存儲(chǔ)和管理數(shù)據(jù),接受觀察者的注冊(cè),一旦數(shù)據(jù)的狀態(tài)發(fā)生變化,Zookeeper就將負(fù)責(zé)通知已經(jīng)在Zookeeper上注冊(cè)的觀察者做出相應(yīng)的反應(yīng),從而實(shí)現(xiàn)集群中類似Master/Slave管理模式。ZooKeeper的目標(biāo)就是封裝好復(fù)雜易出錯(cuò)的關(guān)鍵服務(wù),將簡(jiǎn)單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶。

zookeeper安裝單機(jī)模式

http://www.javacui.com/opensource/445.html

官網(wǎng)

https://curator.apache.org/releases.html#Current_Release

POM引入

<!--                      curator                      -->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>5.2.0</version>
</dependency>
<!--                      fastjson                      -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.79</version>
</dependency>

application.yml定義連接屬性

server:
  port: 80
curator:
  connectString: 192.168.3.22:2181 # zookeeper 地址
  retryCount: 1 # 重試次數(shù)
  elapsedTimeMs: 2000 # 重試間隔時(shí)間
  sessionTimeoutMs: 60000 # session超時(shí)時(shí)間
  connectionTimeoutMs: 10000 # 連接超時(shí)時(shí)間

使用Springboot配置讀取

package com.example.springboot.config;
 
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
 
/**
 * @Auther: Java小強(qiáng)
 * @Date: 2022/2/4 - 19:37
 * @Decsription: com.example.springboot.config
 * @Version: 1.0
 */
@Data
@Component
@ConfigurationProperties(prefix = "curator")
public class CuratorConf {
    private int retryCount;
    private int elapsedTimeMs;
    private String connectString;
    private int sessionTimeoutMs;
    private int connectionTimeoutMs;
}

公用連接創(chuàng)建對(duì)象

package com.example.springboot.tool;
 
import com.example.springboot.config.CuratorConf;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.RetryNTimes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
/**
 * @Auther: Java小強(qiáng)
 * @Date: 2022/2/4 - 19:37
 * @Decsription: com.example.springboot.tool
 * @Version: 1.0
 */
@Configuration
public class ZkConfiguration {
 
    @Autowired
    private CuratorConf curatorConf;
 
    /**
     * 這里會(huì)自動(dòng)調(diào)用一次start,請(qǐng)勿重復(fù)調(diào)用
     */
    @Bean(initMethod = "start")
    public CuratorFramework curatorFramework() {
        return CuratorFrameworkFactory.newClient(
                curatorConf.getConnectString(),
                curatorConf.getSessionTimeoutMs(),
                curatorConf.getConnectionTimeoutMs(),
                new RetryNTimes(curatorConf.getRetryCount(), curatorConf.getElapsedTimeMs()));
    }
 
}

編寫測(cè)試類,實(shí)現(xiàn)各種基礎(chǔ)操作,并挨個(gè)測(cè)試

package com.example.springboot;
 
import com.alibaba.fastjson.JSON;
import com.example.springboot.tool.ZkConfiguration;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.api.BackgroundCallback;
import org.apache.curator.framework.api.CuratorEvent;
import org.apache.zookeeper.data.Stat;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
 
import java.nio.charset.StandardCharsets;
import java.util.List;
 
/**
 * @Auther: Java小強(qiáng)
 * @Date: 2022/2/4 - 19:33
 * @Decsription: com.example.springboot
 * @Version: 1.0
 */
@SpringBootTest(classes = Application.class)
public class CuratorTest {
    @Autowired
    private ZkConfiguration zk;
 
    // 測(cè)試連接
    @Test
    void contextLoads() {
        CuratorFramework client= zk.curatorFramework();
        System.out.println(client.toString());
    }
 
    // 創(chuàng)建節(jié)點(diǎn)
    @Test
    void createPath() throws Exception{
        CuratorFramework client= zk.curatorFramework();
        // 父節(jié)點(diǎn)不存在則創(chuàng)建
        String path = client.create().creatingParentsIfNeeded().forPath("/javacui/p1" ,
                "Java小強(qiáng)博客".getBytes(StandardCharsets.UTF_8));
        System.out.println(path);
        byte[] data = client.getData().forPath("/javacui/p1");
        System.out.println(new String(data));
    }
 
    // 賦值,修改數(shù)據(jù)
    @Test
    void setData() throws Exception{
        CuratorFramework client = zk.curatorFramework();
 
        int version = 0; // 當(dāng)前節(jié)點(diǎn)的版本信息
        Stat stat = new Stat();
        client.getData().storingStatIn(stat).forPath("/javacui/p1");
        version = stat.getVersion();
        // 如果版本信息不一致,說明當(dāng)前數(shù)據(jù)被修改過,則修改失敗程序報(bào)錯(cuò)
        client.setData().withVersion(version).forPath("/javacui/p1",
                "Java崔的博客".getBytes(StandardCharsets.UTF_8));
        byte[] data = client.getData().forPath("/javacui/p1");
        System.out.println(new String(data));
    }
 
    // 查詢節(jié)點(diǎn)
    @Test
    void getPath() throws Exception{
        CuratorFramework client= zk.curatorFramework();
        // 查內(nèi)容
        byte[] data = client.getData().forPath("/javacui/p1");
        System.out.println(new String(data));
 
        // 查狀態(tài)
        Stat stat = new Stat();
        client.getData().storingStatIn(stat).forPath("/javacui/p1");
        System.out.println(JSON.toJSONString(stat, true));
    }
 
    // 刪除節(jié)點(diǎn)
    @Test
    void deletePath() throws Exception{
        CuratorFramework client= zk.curatorFramework();
        // deletingChildrenIfNeeded如果有子節(jié)點(diǎn)一并刪除
        // guaranteed必須成功比如網(wǎng)絡(luò)抖動(dòng)時(shí)造成命令失敗
        client.delete().guaranteed().deletingChildrenIfNeeded().inBackground(new BackgroundCallback() {
            @Override
            public void processResult(CuratorFramework curatorFramework, CuratorEvent curatorEvent) throws Exception {
                System.out.println("刪除成功");
                // { "path":"/javacui/p1","resultCode":0,"type":"DELETE"}
                System.out.println(JSON.toJSONString(curatorEvent, true));
            }
        }).forPath("/javacui/p1");
    }
 
    // 查詢子節(jié)點(diǎn)
    @Test
    void getPaths() throws Exception{
        CuratorFramework client= zk.curatorFramework();
        List<String> paths = client.getChildren().forPath("/javacui");
        for(String p : paths){
            System.out.println(p);
        }
    }
}

以上就是SpringBoot集成Curator實(shí)現(xiàn)Zookeeper基本操作的代碼示例的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Zookeeper基本操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Springboot shiro認(rèn)證授權(quán)實(shí)現(xiàn)原理及實(shí)例

    Springboot shiro認(rèn)證授權(quán)實(shí)現(xiàn)原理及實(shí)例

    這篇文章主要介紹了Springboot shiro認(rèn)證授權(quán)實(shí)現(xiàn)原理及實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Pulsar源碼徹底解決重復(fù)消費(fèi)問題

    Pulsar源碼徹底解決重復(fù)消費(fèi)問題

    這篇文章主要為大家介紹了Pulsar源碼徹底解決重復(fù)消費(fèi)問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Spring源碼BeanFactoryPostProcessor詳解

    Spring源碼BeanFactoryPostProcessor詳解

    BeanFactoryPostProcessor的執(zhí)行時(shí)機(jī)是在Spring掃描完成后,Bean初始化前,當(dāng)我們實(shí)現(xiàn)BeanFactoryPostProcessor接口,可以在Bean的初始化之前對(duì)Bean進(jìn)行屬性的修改,下面通過本文看下Spring源碼分析-BeanFactoryPostProcessor的實(shí)例代碼,感興趣的朋友一起看看吧
    2021-11-11
  • Java的Struts2框架中攔截器使用的實(shí)例教程

    Java的Struts2框架中攔截器使用的實(shí)例教程

    攔截器是Struts框架的重要特性,Struts中每一個(gè)Action請(qǐng)求都包裝在一系列的攔截器的內(nèi)部,這里我們就來看一下Java的Struts2框架中攔截器使用的實(shí)例教程
    2016-07-07
  • springboot項(xiàng)目如何在linux服務(wù)器上啟動(dòng)、停止腳本

    springboot項(xiàng)目如何在linux服務(wù)器上啟動(dòng)、停止腳本

    這篇文章主要介紹了springboot項(xiàng)目如何在linux服務(wù)器上啟動(dòng)、停止腳本問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • K均值聚類算法的Java版實(shí)現(xiàn)代碼示例

    K均值聚類算法的Java版實(shí)現(xiàn)代碼示例

    這篇文章主要介紹了K均值聚類算法的Java版實(shí)現(xiàn)代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Netty與NIO超詳細(xì)講解

    Netty與NIO超詳細(xì)講解

    Netty本質(zhì)上是一個(gè)NIO的框架,適用于服務(wù)器通訊相關(guān)的多種應(yīng)用場(chǎng)景。底層是NIO,NIO底層是Java?IO和網(wǎng)絡(luò)IO,再往下是TCP/IP協(xié)議,下面我們跟隨文章來詳細(xì)了解
    2022-08-08
  • shiro之記住登錄信息

    shiro之記住登錄信息

    Shiro提供了記住我(RememberMe)的功能,當(dāng)關(guān)閉瀏覽器時(shí)下次再次打開還能記住你的信息,下面小編給大家分享shiro之記住登錄信息的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2017-09-09
  • SpringBoot無法請(qǐng)求html等靜態(tài)資源文件webapp或者resources/static的問題及解決方案

    SpringBoot無法請(qǐng)求html等靜態(tài)資源文件webapp或者resources/static的問題及解決方案

    今天遇到一個(gè)問題無法訪問靜態(tài)資源文件,html,本文給大家分享SpringBoot無法請(qǐng)求html等靜態(tài)資源文件webapp或者resources/static的問題及解決方案,感興趣的朋友一起看看吧
    2024-05-05
  • Java文件復(fù)制多種方法實(shí)例代碼

    Java文件復(fù)制多種方法實(shí)例代碼

    近期用到文件復(fù)制,雖然程序很簡(jiǎn)單,因?yàn)闀r(shí)間久了淡忘了,所以寫一篇文章記錄一下,下面這篇文章主要給大家介紹了關(guān)于Java文件復(fù)制多種方法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05

最新評(píng)論