亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot3集成Zookeeper的代碼詳解

 更新時間:2024年01月24日 08:09:56   作者:知了一笑  
ZooKeeper是一個集中的服務(wù),用于維護配置信息、命名、提供分布式同步、提供組服務(wù),分布式應(yīng)用程序以某種形式使用所有這些類型的服務(wù),本文將給大家介紹SpringBoot3集成Zookeeper的代碼,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下

一、簡介

ZooKeeper是一個集中的服務(wù),用于維護配置信息、命名、提供分布式同步、提供組服務(wù)。分布式應(yīng)用程序以某種形式使用所有這些類型的服務(wù)。

二、環(huán)境搭建

1、修改配置文件

# 1、拷貝一份樣本配置文件
cp zookeeper-3.8.3/conf/zoo_sample.cfg zookeeper-3.8.3/conf/zoo.cfg

# 2、修改數(shù)據(jù)文件地址,注意這里用本地路徑
dataDir=/local-path/zookeeper-3.8.3/data

# 3、添加一個配置,處理啟動日志的提示:ZooKeeper audit is disabled.
audit.enable=true

2、服務(wù)啟動

# 1、啟動服務(wù)端
zookeeper-3.8.3/bin/zkServer.sh start

# 2、停止服務(wù)端
zookeeper-3.8.3/bin/zkServer.sh stop

# 3、啟動客戶端
zookeeper-3.8.3/bin/zkCli.sh

3、客戶端測幾個增刪查的命令

[zk: localhost:2181(CONNECTED) 0] create /cicada smile1
Created /cicada
[zk: localhost:2181(CONNECTED) 1] get /cicada
smile1
[zk: localhost:2181(CONNECTED) 2] ls /
[cicada, zookeeper]
[zk: localhost:2181(CONNECTED) 3] delete /cicada

三、工程搭建

1、工程結(jié)構(gòu)

2、依賴管理

Curator是一組Java庫,它讓ZooKeeper的使用變得更加容易,這里的依賴實際是查詢匹配版本的時候走了個捷徑,也可以參考integration-redis包,熟悉下Spring的封裝策略。

<!-- Zookeeper組件 -->
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>${zookeeper.version}</version>
</dependency>
<!-- 包含Curator組件 -->
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-zookeeper</artifactId>
    <version>${spring-integration.version}</version>
</dependency>

3、配置文件

配置腳本

zookeeper:
  #服務(wù)器地址
  connectString: 127.0.0.1:2181
  #會話超時時間
  sessionTimeoutMs: 3000
  #連接超時時間
  connectionTimeoutMs: 60000
  #最大重試次數(shù)
  maxRetries: 3
  #初始休眠時間
  baseSleepTimeMs: 1000

配置類

@Configuration
public class ZookeeperConfig {

    @Value("${zookeeper.connectString}")
    private String connectString;
    
    @Value("${zookeeper.baseSleepTimeMs}")
    private int baseSleepTimeMs;

    @Value("${zookeeper.maxRetries}")
    private int maxRetries ;

    @Value("${zookeeper.connectionTimeoutMs}")
    int connectionTimeoutMs ;

    @Value("${zookeeper.sessionTimeoutMs}")
    int sessionTimeoutMs ;

    private static CuratorFramework client = null ;
    /**
     * 初始化
     */
    @PostConstruct
    public void init (){
        // 重試策略
        RetryPolicy policy = new ExponentialBackoffRetry(baseSleepTimeMs, maxRetries);
        // 創(chuàng)建Curator
        client = CuratorFrameworkFactory.builder()
                .connectString(connectString)
                .connectionTimeoutMs(connectionTimeoutMs)
                .sessionTimeoutMs(sessionTimeoutMs)
                .retryPolicy(policy).build();
        //開啟連接
        client.start();
    }

    @Bean
    public CuratorFramework getClient (){
        return client ;
    }
}

四、ZooKeeper用法

測試幾個API方法,節(jié)點創(chuàng)建和添加數(shù)據(jù),以及判斷和查詢數(shù)據(jù),還有就是基于ZooKeeper提供的讀寫鎖能力。

public class ConfigTest {

    @Autowired
    private CuratorFramework client ;

    @Test
    public void testCreate () throws Exception {
        // 創(chuàng)建一個持久化節(jié)點,斷開連接時不會自動刪除
        client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath("/path1");
    }

    @Test
    public void testExists () throws Exception {
        // 判斷節(jié)點是否存在,path2不存在所以stat2是null
        Stat stat1 = client.checkExists().forPath("/path1");
        System.out.println(stat1);
        Stat stat2 = client.checkExists().forPath("/path2");
        System.out.println(stat2);
    }

    @Test
    public void testSetData () throws Exception {
        // 設(shè)置節(jié)點數(shù)據(jù)
        client.setData().forPath("/path1", "data1".getBytes(StandardCharsets.UTF_8));
    }

    @Test
    public void testCreateAndSet () throws Exception {
        // 創(chuàng)建一個持久化節(jié)點并設(shè)置節(jié)點數(shù)據(jù)
        client.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT)
                .forPath("/path3","data3".getBytes(StandardCharsets.UTF_8));
    }

    @Test
    public void testGetData () throws Exception {
        // 查詢節(jié)點數(shù)據(jù)
        byte[] data = client.getData().forPath("/path3");
        System.out.println(new String(data,StandardCharsets.UTF_8));
    }

    @Test
    public void testDelete () throws Exception {
        // 刪除節(jié)點
        client.delete().guaranteed().deletingChildrenIfNeeded().forPath("/path3");
    }

    @Test
    public void testReadLock () throws Exception {
        // 讀寫鎖-讀
        InterProcessReadWriteLock lock = new InterProcessReadWriteLock(client,"/lock-read");
        lock.readLock().acquire();
        System.out.println("獲取-ReadLock");
        lock.readLock().release();
    }

    @Test
    public void testWriteLock () throws Exception {
        // 讀寫鎖-寫
        InterProcessReadWriteLock lock = new InterProcessReadWriteLock(client,"/lock-write");
        lock.writeLock().acquire();
        System.out.println("獲取-WriteLock");
        lock.writeLock().release();
    }
}

五、參考源碼

文檔倉庫:
https://gitee.com/cicadasmile/butte-java-note

源碼倉庫:
https://gitee.com/cicadasmile/butte-spring-parent

以上就是SpringBoot3集成Zookeeper的代碼詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot3集成Zookeeper的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java 基礎(chǔ)語法

    Java 基礎(chǔ)語法

    這篇文章主要介紹了Java 基礎(chǔ)語法,Java 是一門面向?qū)ο蟮慕忉屝途幊陶Z言,面向?qū)ο?意味著我們應(yīng)該把一個 Java 程序看作一系列對象的集合,我們的工作就是構(gòu)建這些對象,并通過調(diào)用彼此的方法來讓各種對象協(xié)同工作,解決實際的問題,下面文章內(nèi)容需要的朋友可以參考下一
    2021-11-11
  • SpringBoot項目使用內(nèi)置的單機任務(wù)調(diào)度功能詳解

    SpringBoot項目使用內(nèi)置的單機任務(wù)調(diào)度功能詳解

    這篇文章主要介紹了SpringBoot項目使用內(nèi)置的單機任務(wù)調(diào)度功能詳解,SpringBoot框架中提供了2個注解來讓開發(fā)者快速配置來實現(xiàn)單機定時任務(wù)調(diào)度的功能,分別是@EnableScheduling和 @Scheduled,需要的朋友可以參考下
    2024-01-01
  • RocketMQ中消費者的消費進度管理

    RocketMQ中消費者的消費進度管理

    這篇文章主要介紹了RocketMQ中消費者的消費進度管理,業(yè)務(wù)實現(xiàn)消費回調(diào)的時候,當(dāng)且僅當(dāng)此回調(diào)函數(shù)返回ConsumeConcurrentlyStatus.CONSUME_SUCCESS ,RocketMQ才會認(rèn)為這批消息(默認(rèn)是1條)是消費完成的,需要的朋友可以參考下
    2023-10-10
  • springboot自帶的緩存@EnableCaching用法

    springboot自帶的緩存@EnableCaching用法

    這篇文章主要介紹了springboot自帶的緩存@EnableCaching用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)詳細(xì)教程

    一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)詳細(xì)教程

    使用SSM(Spring、SpringMVC和Mybatis)已經(jīng)有段時間了,項目在技術(shù)上已經(jīng)沒有什么難點了,基于現(xiàn)有的技術(shù)就可以實現(xiàn)想要的功能,下面這篇文章主要給大家介紹了關(guān)于整合SSM框架:Spring MVC + Spring + MyBatis的相關(guān)資料,需要的朋友可以參考下。
    2017-07-07
  • Java NIO.2 使用Path接口來監(jiān)聽文件、文件夾變化

    Java NIO.2 使用Path接口來監(jiān)聽文件、文件夾變化

    Java7對NIO進行了大的改進,新增了許多功能,接下來通過本文給大家介紹Java NIO.2 使用Path接口來監(jiān)聽文件、文件夾變化 ,需要的朋友可以參考下
    2019-05-05
  • 一文徹底掌握RocketMQ 的存儲模型

    一文徹底掌握RocketMQ 的存儲模型

    這篇文章主要介紹了RocketMQ 的存儲模型,本文的重點在于分析 BrokerServer 的消息存儲模型,筆者按照自己的理解 , 嘗試分析 RocketMQ 的存儲模型,需要的朋友可以參考下
    2022-12-12
  • SpringBoot同一個方法操作多個數(shù)據(jù)源保證事務(wù)一致性

    SpringBoot同一個方法操作多個數(shù)據(jù)源保證事務(wù)一致性

    本文探討了在Spring Boot應(yīng)用中,如何在同一個方法中操作多個數(shù)據(jù)源并保證事務(wù)的一致性,由于聲明式事務(wù)的限制,直接使用@Transactional注解無法滿足需求,文章介紹了解決方案:編程式事務(wù),它允許在代碼級別更靈活地管理事務(wù),確保多數(shù)據(jù)源操作的事務(wù)一致性
    2024-11-11
  • Java多線程編程之CountDownLatch同步工具使用實例

    Java多線程編程之CountDownLatch同步工具使用實例

    這篇文章主要介紹了Java多線程編程之CountDownLatch同步工具使用實例,需要的朋友可以參考下
    2015-05-05
  • Spring Boot 在啟動時進行配置文件加解密的方法詳解

    Spring Boot 在啟動時進行配置文件加解密的方法詳解

    這篇文章主要介紹了Spring Boot 在啟動時進行配置文件加解密的方法,本文通過實例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06

最新評論