Zookeeper:Zookeeper JavaAPI操作與分布式鎖

文章目錄

  • 一、Zookeeper JavaAPI操作
    • 1、Curator介紹
    • 2、創建、查詢、修改、刪除節點
    • 3、Watch事件監聽
  • 二、Zookeeper分布式鎖原理

一、Zookeeper JavaAPI操作

1、Curator介紹

  • Curator是Apache Zookeeper的Java客戶端。
  • 常見的Zookeeper Java API:
    • 原生Java API。
    • ZkClient。
    • Curator。
  • Curator項目目標是簡化Zookeeper客戶端的使用。
  • Curator最初是Netfix研發的,后來捐獻了Apache基金會,目前是Apache的頂級項目。
  • 官網:https://curator.apache.org/docs/about

2、創建、查詢、修改、刪除節點

public class CuratorTest {private CuratorFramework client;@Beforepublic void init() {// 1、方式一RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 10);CuratorFramework curatorFramework = CuratorFrameworkFactory.newClient("localhost:2181", 60 * 1000, 15 * 1000, retryPolicy);// 2、方式二CuratorFramework client = CuratorFrameworkFactory.builder().connectString("localhost:2181").sessionTimeoutMs(60 * 1000).connectionTimeoutMs(15 * 1000).retryPolicy(retryPolicy).namespace("test").build();// 開啟連接client.start();this.client = client;}/*** 1、基本創建:client.create().forPath("/app1")* 2、創建節點,帶有數據:client.create().forPath("/app1", data)* 3、設置節點的類型: client.create().withMode(CreateMode.EPHEMERAL).forPath("/app1")* 4、創建多級節點: client.create().creatingParentsIfNeeded().forPath("/app1/app2")*/@Testpublic void testCreate() {// 1、基本創建// 如果創建節點,沒有指定數據,則默認將當前客戶端的ip作為數據存儲try {String path = client.create().forPath("/app1");System.out.println(path);} catch (Exception e) {throw new RuntimeException(e);}}/*** 查詢節點:* 1、查詢數據:get* 2、查詢子節點: ls* 3、查詢節點狀態信息: ls -s*/@Testpublic void testQueryData() {// 1、查詢數據: gettry {byte[] data = client.getData().forPath("/app1");System.out.println(new String(data));} catch (Exception e) {throw new RuntimeException(e);}}@Testpublic void testQueryChildren() {// 查詢子節點: lstry {List<String> stringList = client.getChildren().forPath("/");System.out.println(stringList);} catch (Exception e) {throw new RuntimeException(e);}}@Testpublic void testQueryState() {// 查詢節點狀態信息: ls -sStat status = new Stat();try {client.getData().storingStatIn(status).forPath("/app1");System.out.println(status);} catch (Exception e) {throw new RuntimeException(e);}}/*** 修改數據:* 1、修改數據。* 2、根據版本修改*/@Testpublic void testSet() {// 修改數據try {client.setData().forPath("/app1", "haha".getBytes());} catch (Exception e) {throw new RuntimeException(e);}}@Testpublic void testSetForVersion() throws Exception {// 根據版本修改Stat stat = new Stat();// 查詢節點狀態信息: ls -sclient.getData().storingStatIn(stat).forPath("/app1");int version = stat.getVersion();client.setData().withVersion(version).forPath("/app1", "hehe".getBytes());}/*** 刪除節點:delete、deleteall* 1、刪除單個節點* 2、刪除帶有子節點的節點* 3、必須成功的刪除: 為了防止網絡抖動。本質就是重試。* 4、回調*/@Testpublic void testSingleDelete() throws Exception {// 1、刪除單個節點client.delete().forPath("/app1");// 2、刪除帶有子節點的節點client.delete().deletingChildrenIfNeeded().forPath("/app1");// 3、必須成功刪除client.delete().guaranteed().forPath("/app1");//4、回調client.delete().guaranteed().inBackground((client, event) -> {System.out.println("我被刪除了");System.out.println(event);}).forPath("/app1");}@Afterpublic void close() {if (client != null) {client.close();}}
}

3、Watch事件監聽

  • Zookeeper允許用戶在指定節點上注冊一些Watcher,并且在一些特定事件觸發的時候,Zookeeper服務端會將事件通知到感興趣的客戶端上去,該機制是Zookeeper實現分布式協調服務的重要性。
  • Zookeeper中引入了Watcher機制來實現了發布/訂閱功能,能夠讓多個訂閱者同時監聽某一個對象,當一個對象自身狀態變化時,會通知所有訂閱者。
  • Zookeeper原生支持通過注冊Watcher來進行事件監聽,但是其使用并不是特別方便需要開發人員自己反復注冊Watcher,比較繁瑣。
  • Curator引入了Cache來實現對Zookeeper服務端事件的監聽。
  • Zookeeper提供了三種Watcher:
    • NodeCache:只是監聽某一個特定的節點。
    • PathChildrenCache:監控一個ZNode的子節點。
    • TreeCache:可以監控整個樹上所有節點,類似于PathChildrenCache和NodeCache的組合。

二、Zookeeper分布式鎖原理

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37199.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37199.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37199.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

天氣網站爬蟲及可視化

摘要&#xff1a;隨著互聯網的快速發展&#xff0c;人們對天氣信息的需求也越來越高。本論文基于Python語言&#xff0c;設計并實現了一個天氣網站爬蟲及可視化系統。該系統通過網絡爬蟲技術從多個天氣網站上獲取實時的天氣數據&#xff0c;并將數據進行清洗和存儲。同時&#…

數據倉庫面試題(二)

1. 簡述星型模型和雪花模型的區別&#xff1f;應用場景 &#xff1f; 星型模型&#xff08;Star Schema&#xff09;和雪花模型&#xff08;Snowflake Schema&#xff09;是數據倉庫中常用的兩種維度建模方法&#xff0c;它們在數據組織和設計上有所不同。 星型模型&#xff…

【簡易版tinySTL】 哈希表與移動語義

基本概念 哈希表&#xff08;HashTable&#xff09;是一個重要的底層數據結構, 無序關聯容器包括unordered_set, unordered_map內部都是基于哈希表實現。 哈希表是一種通過哈希函數將鍵映射到索引的數據結構&#xff0c;存儲在內存空間中。哈希函數負責將任意大小的輸入映射到…

【C++】內存分區

目錄 內存分區代碼運行前后區別各分區詳細解釋C內存申請和釋放 內存分區 不同的操作系統對程序內存的管理和劃分會有所不同。 此處是C內存區域劃分主要是針對通用的情況&#xff0c;并不限定在某個特定操作系統上 一般分為4個區&#xff08;有時把全局區拆分成數據區未初始化…

git 命令學習之branch 和 tag 操作

引言 在項目一個迭代過程結束之時&#xff0c;或是一個版本發布之后&#xff0c;我們要進行 新版本的開發&#xff0c;這時就需要對原來的項目代碼進行封存&#xff0c;以及新項目代碼的開始&#xff0c;這時就需要用到 branch 和 tag 操作。下面簡單說說對這兩個操作的理解。…

微服務之服務保護策略【持續更新】

文章目錄 線程隔離一、滑動窗口算法二、漏桶算法三、令牌桶算法 面試題1、Sentinel 限流和Gateway限流的區別 線程隔離 兩種實現方式 線程池隔離&#xff08;Hystix隔離&#xff09;&#xff0c;每個被隔離的業務都要創建一個獨立的線程池&#xff0c;線程過多會帶來額外的CPU…

【C語言】C語言-體育彩票的模擬生成和兌獎(源碼+論文)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;公眾號&#x1f448;&#xff1a;測試開發自動化【獲取源碼商業合作】 &#x1f449;榮__譽&#x1f448;&#xff1a;阿里云博客專家博主、5…

【涵子來信科技潮流】——WWDC24回顧與暑假更新說明

期末大關&#xff0c;即將來襲。在期末之前&#xff0c;我想發一篇文章&#xff0c;介紹有關WWDC24的內容和暑假中更新的說明。本篇文章僅為個人看法和分享&#xff0c;如需了解更多詳細內容&#xff0c;請通過官方渠道或者巨佬文章進行進一步了解。 OK, Lets go. 一、WWDC24 …

Linux grep技巧 刪除含有指定關鍵詞的行,創建新文件

一. 需求 ?有如下文件&#xff0c;現要求 刪除含有xuecheng關鍵字的行刪除含有192.168.1.1關鍵字的行也就是說&#xff0c;最終只會留下127.0.0.1 license.sublimehq.com 127.0.0.1 www.xuecheng.com 127.0.0.1 img.xuecheng.com 192.168.1.1 www.test.com 127.0.0.1 video…

力扣每日一題 6/30 記憶化搜索/動態規劃

博客主頁&#xff1a;誓則盟約系列專欄&#xff1a;IT競賽 專欄關注博主&#xff0c;后期持續更新系列文章如果有錯誤感謝請大家批評指出&#xff0c;及時修改感謝大家點贊&#x1f44d;收藏?評論? 494.目標和【中等】 題目&#xff1a; 給你一個非負整數數組 nums 和一個…

VMware17.0 安裝過程

VMware17.0 VMware 17.0 是一款功能強大的虛擬機軟件&#xff0c;用于在計算機上創建和管理虛擬機。它能夠同時運行多個操作系統&#xff0c;如 Windows、Linux 等&#xff0c;并且在這些虛擬機之間提供無縫的切換和共享功能。 VMware 17.0 支持最新的硬件和操作系統&#xf…

Chrome瀏覽器web調試(js調試、css調試、篡改前置)

目錄 1. 打開開發者工具(Dev Tool) 2. 打開命令菜單 截圖 3. 面板介紹 4. CSS調試 右鍵檢查快速到達元素處 查找DOM數 利用面板Console查找DOM節點 內置函數查找上一個選擇點擊的元素 5. 調試JS代碼(Javascript調試) 日志調試 選擇查看日志等級 眼睛觀測變量 …

【Leetcode 67 Easy】二進制求和

目錄 題目描述&#xff1a; 整體思路&#xff1a; 具體代碼&#xff1a; 題目描述&#xff1a; 原題地址 給你兩個二進制字符串 a 和 b &#xff0c;以二進制字符串的形式返回它們的和。 示例 1&#xff1a; 輸入:a "11", b "1" 輸出&#xff1a;&qu…

ubuntu 18 虛擬機安裝(4)安裝 postgres sql 數據庫

ubuntu 18 虛擬機安裝&#xff08;4&#xff09;安裝 postgres sql 數據庫 如何查看PostgreSQL的版本 https://blog.csdn.net/lee_vincent1/article/details/138731465 postgres 查看全部數據庫 https://blog.csdn.net/xie__jin__cheng/article/details/138653002 Ubuntu18.04…

數據資產鑄就市場競爭優勢:運用先進的數據分析技術,精準把握市場脈搏,構建獨特的競爭優勢,助力企業實現市場領先地位,贏得持續成功

目錄 一、引言 二、數據資產的重要性 三、先進數據分析技術的應用 1、大數據分析技術 2、人工智能與機器學習 3、數據可視化技術 四、精準把握市場脈搏 1、深入了解客戶需求 2、預測市場趨勢 3、優化資源配置 五、構建獨特的競爭優勢 1、定制化產品和服務 2、精準營…

數據結構—判斷題

1.數據的邏輯結構說明數據元素之間的順序關系&#xff0c;它依賴于計算機的存儲結構。 答案&#xff1a;錯誤 2.(neuDS)在順序表中邏輯上相鄰的元素&#xff0c;其對應的物理位置也是相鄰的。 答案&#xff1a;正確 3.若一個棧的輸入序列為{1, 2, 3, 4, 5}&#xff0c;則不…

nginx上傳文件限制

默認限制 Nginx 限制文件大小可以通過 client_max_body_size 指令來設置&#xff0c;該指令通常在 http、server 或 location 塊中設置&#xff0c;如果不設置&#xff0c;默認上傳大小為1M。 修改上傳文件限制 要修改Nginx的文件上傳大小限制&#xff0c;你需要編輯Nginx的配…

接口自動化測試關聯token的方法?

引言&#xff1a; 在接口自動化測試中&#xff0c;有時候我們需要關聯token來進行身份驗證或權限管理。本文將從零開始&#xff0c;介紹如何詳細且規范地實現接口自動化測試中token的關聯。 步驟一&#xff1a;準備工作 在開始之前&#xff0c;我們需要確保以下準備工作已完成…

如何在 Linux 中后臺運行進程?

一、后臺進程 在后臺運行進程是 Linux 系統中的常見要求。在后臺運行進程允許您在進程獨立運行時繼續使用終端或執行其他命令。這對于長時間運行的任務或當您想要同時執行多個命令時特別有用。 在深入研究各種方法之前&#xff0c;讓我們先了解一下什么是后臺進程。在 Linux 中…