zookeeper Curator(2):Curator的節點操作

文章目錄

  • zookeeper 的安裝
  • Curator 介紹
  • Curator API 常用操作
  • 本章必要的相關依賴和配置
  • 建立連接
    • 第一種方式
    • 第二種方式
  • 關閉連接
  • 添加節點
    • 創建節點
    • 創建節點并設置值和類型
    • 創建多級節點
  • 查詢節點
    • 查詢數據
    • 查詢所有子節點
    • 查詢節點信息
  • 修改節點
    • 修改節點數據
    • 修改節點(樂觀鎖修改,根據版本號)
    • 創建或者修改數據
  • 刪除節點
    • 刪除節點
    • 刪除帶有子節點的節點
    • 必須刪除成功
    • 刪除后回調

本章代碼已分享至Gitee: https://gitee.com/lengcz/curator01

zookeeper 的安裝

關于zookeeper的安裝請見: dubbo(2):zookeeper和dubbo-admin的安裝

Curator 介紹

Curator 是Apache Zookeeper 的java 客戶端庫
常見的Zookeeper Java API

  • 原生Java API
  • ZkClient
  • Curator

Curator 項目的目標是簡化Zookeeper 客戶端的使用。
Curator 最初是Netfix 研發的,后來捐獻給了Apache基金會,目前屬于 Apache頂級項目。
Curator 官網: https://curator.apache.org/

Curator API 常用操作

  • 建立連接
  • 添加節點
  • 刪除節點
  • 修改節點
  • 查詢節點
  • Watch事件監聽
  • 分布式鎖實現

本章必要的相關依賴和配置

<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.21</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.21</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 --><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.57</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>

建立連接

第一種方式

        //1 第一種方式/** String connectString, 連接字符串 zk server 地址和端口 ip1:port1,ip2:port2....*  int sessionTimeoutMs, 會話超時時間  單位ms* int connectionTimeoutMs,  連接超時時間,單位ms*  RetryPolicy retryPolicy  重拾策略*/RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 10);String connectString = "localhost:2181";CuratorFramework client =CuratorFrameworkFactory.newClient(connectString, 60_000, 15_000, retryPolicy);client.start();

第二種方式

//2 第二種方式,鏈式編程CuratorFramework client2 = CuratorFrameworkFactory.builder().connectString(connectString).sessionTimeoutMs(60_000).connectionTimeoutMs(15_000).retryPolicy(retryPolicy).namespace("demo01").build();client2.start();

namespace表示根節點,表示這個客戶端的操作都在這個節點之下,后續使用中不需要從根開始聲明。

  • 節點不需要手動創建,連接是會自動創建

關閉連接

 client.close();

添加節點

創建節點

@Testpublic void testCreate() throws Exception {//如果創建節點,沒有指定數據,則默認將當前客戶端的ip作為數據存儲String path = client.create().forPath("/app1");logger.info(path);}

在這里插入圖片描述

創建節點并設置值和類型

 @Testpublic void testCreate() throws Exception {//如果創建節點,沒有指定數據,則默認將當前客戶端的ip作為數據存儲
//        String path = client.create().forPath("/app1");
//        logger.info(path);// withMode 指定節點類型,是臨時的,還是臨時的,順序的String path2 = client.create().withMode(CreateMode.EPHEMERAL).forPath("/app3","hello world".getBytes()); //創建節點并設置值logger.info(path2);}

withMode :模式。EPHEMERAL 臨時的,當會話關閉時,節點會被刪除。

創建多級節點

  // creatingParentContainersIfNeeded 如果節點不存在則創建String path3 = client.create().creatingParentContainersIfNeeded().forPath("/app4/p1"); //創建多級節點logger.info(path3);
  • creatingParentContainersIfNeeded 如果節點不存在則創建

查詢節點

查詢數據

  byte[] bytes = client.getData().forPath("/app1");logger.info(new String(bytes));

查詢所有子節點

//獲取子節點List<String> paths = client.getChildren().forPath("/app4");paths.forEach(c ->logger.info(c));List<String> paths2 = client.getChildren().forPath("/");//查詢根節點

查詢節點信息

@Testpublic void testGetNodeInfo() throws Exception {//  查詢節點狀態信息 ls -sStat status = new Stat();client.getData().storingStatIn(status).forPath("/app1");logger.info(JSONObject.toJSONString(status));}

在這里插入圖片描述

修改節點

修改節點數據

  @Testpublic void testSet() throws Exception {// 修改數據client.setData().forPath("/app1","hello".getBytes());}

在這里插入圖片描述

修改節點(樂觀鎖修改,根據版本號)

 @Testpublic void testSetForVersion() throws Exception {Stat status = new Stat();//定義空的Stat接受返回結果client.getData().storingStatIn(status).forPath("/app1");int version = status.getVersion();//查詢版本logger.info("版本號:"+version);// 修改數據,如果版本不一致,則不修改數據,樂觀鎖模式client.setData().withVersion(version).forPath("/app1","hello".getBytes());}

圖片表示版本號
在這里插入圖片描述

創建或者修改數據

如果節點不存在,則創建節點,并設置數據,如果節點存在則修改數據

@Testpublic void testCreatOrSetDataForVersion() throws Exception {Stat status = new Stat();//定義空的Stat接受返回結果client.create().orSetData.storingStatIn(status).forPath("/app1");int version = status.getVersion();//查詢版本logger.info("版本號:"+version);}

刪除節點

刪除節點

  /*** 1 刪除節點 delete* 2 刪除節點帶有子節點的節點 deleteall* 3 必須成功的刪除* 4 回調* @throws Exception*/@Testpublic void testDelete() throws Exception {// 刪除節點dclient.delete().forPath("/app1");}

刪除帶有子節點的節點

  @Testpublic void testDelete2() throws Exception {// 刪除節點帶有子節點的節點client.delete().deletingChildrenIfNeeded().forPath("/app4");}

必須刪除成功

 @Testpublic void testDelete3() throws Exception {// 必須刪除成功client.delete().guaranteed().forPath("/app4");}

必須成功就是重試,防止網絡抖動

刪除后回調

 @Testpublic void testCallback() throws Exception{// 回調client.delete().guaranteed().inBackground(new BackgroundCallback() {@Overridepublic void processResult(CuratorFramework curatorFramework, CuratorEvent curatorEvent) throws Exception {logger.info("刪除后的消息回調");}}).forPath("/app4");}

在這里插入圖片描述

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

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

相關文章

計算機視覺的定義及應用方向

近兩年來&#xff0c;機器學習、深度學習、人工智能等方向逐步成為很多同學最關注的研究和就業方向。不可否認&#xff0c;計算機視覺作為深度學習的應用領域之一&#xff0c;在工業界取得了蓬勃的發展&#xff0c;也是目前最熱門的方向之一。 計算機視覺是什么 計算機視覺主要…

低代碼開發實戰:使用活字格快速創建 Java Web API

引言 在當今快速發展的軟件開發領域&#xff0c;低代碼平臺因其高效性和易用性而備受關注。Java Web API作為企業級應用開發的重要組成部分&#xff0c;與低代碼平臺的結合能夠顯著提升開發效率。本文將以葡萄城活字格平臺為例&#xff0c;詳細介紹如何利用其低代碼特性快速創…

當后端接口返回格式不是easyui默認的格式,怎么辦

方法:可以增加一個數據過濾方法對后端的接口結構進行轉換。 分析:easyui默認情況下,只能接收如下格式的接口: {"total": 1,"rows": [{"id": 1,"userName": "jiao","unionId": 1,"phone": "2…

第一彈 AC Module: 和編程語言無關以AI為中心的自包含模塊化理念和實現

背景和問題 說起模塊/包&#xff0c;幾乎是大部分語言都有的概念&#xff0c;因為一個項目會很龐大&#xff0c;如果單純只用文件做隔離&#xff0c;文件可能幾千上萬個&#xff0c;所以需要在項目和文件之間獲得一個平衡&#xff0c;這個時候就有包和模塊的概念。比如python 你…

Edge(chrome)右鍵插件的右鍵菜單怎么設置

主要使用 contextMenus 右鍵菜單功能&#xff0c;正常用它給頁面設置右鍵菜單&#xff0c;其實它也可以給插件還有其它功能設置右鍵菜單&#xff0c;是根據 contexts 選項來設置給哪個功能設置右鍵菜單。 首先添加權限 "permissions": ["contextMenus"], …

后端設計筆記13 FM

1.理論 2.實踐 LAB 報錯以后可以雙擊錯誤&#xff0c;便可以定位到錯誤&#xff0c;或者打開pattern查看 還可以analyse

閑庭信步使用SV搭建圖像測試平臺:第十九課——YCbCr圖像轉RGB圖像

&#xff08;本系列只需要modelsim即可完成數字圖像的處理&#xff0c;每個工程都搭建了全自動化的仿真環境&#xff0c;只需要雙擊文件就可以完成整個的仿真&#xff0c;大大降低了初學者的門檻&#xff01;&#xff01;&#xff01;&#xff01;如需要該系列的工程文件請關注…

C++(智能指針)

智能指針 1.基礎&#xff1a; 1.1 概念 智能指針是用于自動管理動態分配內存的RAII&#xff08;Resource Acquisition Is Initialization&#xff09;對象。它們通過自動釋放內存來防止內存泄漏&#xff0c;是替代裸指針的安全工具。 1.2 解析 眾所周知&#xff0c;堆內存對象…

Sentinel 授權規則詳解與自定義異常處理

Sentinel 授權規則詳解與自定義異常處理 在微服務系統中&#xff0c;權限控制和訪問保護是至關重要的一環。本文將詳細介紹如何通過 Sentinel 的 授權規則&#xff08;AuthorityRule&#xff09; 控制資源訪問權限&#xff0c;并結合實際案例說明如何設置白名單與黑名單&#…

LeetCode Hot 100 最大子數組和

給你一個整數數組 nums &#xff0c;請你找出一個具有最大和的連續子數組&#xff08;子數組最少包含一個元素&#xff09;&#xff0c;返回其最大和。 子數組是數組中的一個連續部分。 示例 1&#xff1a; 輸入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 輸出&#xff1a;6…

Python UI自動化演進格局:從傳統庫到AI驅動的智能代理

引言 UI自動化的持久需求 在現代軟件工程和業務流程管理中&#xff0c;圖形用戶界面&#xff08;GUI&#xff09;自動化扮演著至關重要的角色。它不僅僅局限于軟件測試領域&#xff0c;更是機器人流程自動化&#xff08;RPA&#xff09;、自動化數據錄入、遺留系統集成以及在AP…

【Java面試】如何解決MQ死信隊列?

如何解決MQ死信隊列&#xff1f; 一、預防死信產生&#xff08;從源頭減少死信&#xff09; 消費者端健壯性優化 捕獲所有可能的異常&#xff0c;區分可恢復異常&#xff08;如網絡超時&#xff09;和不可恢復異常&#xff08;如數據格式錯誤&#xff09;。對可恢復異常實現自…

RGB+EVS視覺融合相機:事件相機的革命性突破?

一、單一EVS事件相機的原理 事件相機&#xff08;EVS&#xff09;是一種新型的視覺傳感器&#xff0c;其設計靈感來源于生物視覺系統。與傳統相機不同&#xff0c;事件相機并不以固定的幀率捕獲整個圖像&#xff0c;而是每個像素獨立工作&#xff0c;當檢測到亮度變化超過預設…

DBeaver 設置阿里云中央倉庫地址的操作步驟

DBeaver 設置阿里云中央倉庫地址的操作步驟&#xff08;適用于解決驅動下載緩慢或失敗的問題&#xff09; 一、最新阿里云 Maven 倉庫地址 主倉庫地址&#xff08;推薦&#xff09;&#xff1a; http://maven.aliyun.com/nexus/content/groups/public/ 123 備用地址&#xff…

Qt:QCustomPlot庫的QCPAxis

在 QCustomPlot 中&#xff0c;QCPAxis 是圖表坐標系的核心組件&#xff0c;負責管理坐標軸的所有視覺和功能特性。它提供了豐富的定制選項&#xff0c;使開發者能夠創建高度專業化的數據可視化圖表。 核心功能概述 功能類別關鍵特性相關方法基本結構坐標軸位置、方向axisTyp…

七天學會SpringCloud分布式微服務——05——OpenFeign

1、OpenFeign實現遠程調用 1.1 services.pom引入依賴 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>1.2 在service-order微服務中新建feign.Product…

大語言模型的通用局限性與全球技術演進

基于行業最新數據修訂&#xff08;2025Q2&#xff09; 一、知識截止期&#xff1a;全球模型的進化差異 所有LLM都存在??知識截止期&#xff08;Knowledge Cut-off&#xff09;??&#xff0c;即模型訓練數據的時間上限。這在技術迭代飛快的軟件開發領域尤為致命——2023年后…

常見網絡安全威脅和防御措施

網絡安全威脅是一種技術風險&#xff0c;會削弱企業網絡的防御能力&#xff0c;危及專有數據、關鍵應用程序和整個 IT 基礎設施。由于企業面臨廣泛的威脅&#xff0c;因此他們應該仔細監控和緩解最關鍵的威脅和漏洞。網絡安全問題有七大類&#xff0c;它們都包括多種威脅&#…

人工智能和云計算對金融未來的影響

你有沒有想過&#xff0c;你的錢是否會由人工智能而不是銀行來管理&#xff1f;如果你的銀行不存在于真實的地方&#xff0c;而是存在于幾千公里之外的某臺大型超級計算機上&#xff0c;那會怎樣&#xff1f;這可能有一天會發生&#xff0c;讓我們看看它是如何發生的&#xff0…

Vue3——項目配置eslint+prettier

一、安裝依賴 pnpm add -D eslint prettier eslint-plugin-vue vue-eslint-parser typescript-eslint/eslint-plugin typescript-eslint/parser eslint-config-prettier eslint-plugin-prettier typescript-eslint二、創建或修改 eslint.config.cjs // eslint.config.cjs con…