Zookeeper入門(三)

Zookeeper Java 客戶端

項目構建

ookeeper 官方的客戶端沒有和服務端代碼分離,他們為同一個jar 文件,所以我們直接引入
zookeeper的maven即可, 這里版本請保持與服務端版本一致,不然會有很多兼容性的問題

1 <dependency>
2 <groupId>org.apache.zookeeper</groupId>
3 <artifactId>zookeeper</artifactId>
4 <version>3.5.8</version>
5 </dependency>

創建客戶端實例:

為了便于測試,直接在初始化方法中創建zookeeper實例

1 @Slf4j
2 public class ZookeeperClientTest {
3
4 private static final String ZK_ADDRESS="192.168.109.200:2181";
5
6 private static final int SESSION_TIMEOUT = 5000;
7
8 private static ZooKeeper zooKeeper;
9
10 private static final String ZK_NODE="/zk‐node";
11
12
13 @Before
14 public void init() throws IOException, InterruptedException {
15 final CountDownLatch countDownLatch=new CountDownLatch(1);
16 zooKeeper=new ZooKeeper(ZK_ADDRESS, SESSION_TIMEOUT, event ‐> {
17 if (event.getState()== Watcher.Event.KeeperState.SyncConnected &&
18 event.getType()== Watcher.Event.EventType.None){
19 countDownLatch.countDown();
20 log.info("連接成功!");
21 }
22 });
23 log.info("連接中....");
24 countDownLatch.await();
25 }
26 }

創建Zookeeper實例的方法:

1 ZooKeeper(String connectString, int sessionTimeout, Watcher watcher)
2 ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, ZKClientC
onfig)
3 ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, boolean c
anBeReadOnly, HostProvider)
4 ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, boolean c
anBeReadOnly, HostProvider, ZKClientConfig)
5 ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, boolean c
anBeReadOnly)
6 ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, boolean c
anBeReadOnly, ZKClientConfig)
7 ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long, byt
e[])
8 ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long, byt
e[], boolean, HostProvider)
9 ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long, byt
e[], boolean, HostProvider, ZKClientConfig)
10 ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long, by
te[], boolean)

connectString:

ZooKeeper服務器列表,由英文逗號分開的host:port字符串組成,
每一個都代表一臺ZooKeeper機器,如,
host1:port1,host2:port2,host3:port3。另外,也可以在connectString中設
置客戶端連接上ZooKeeper
后的根目錄,方法是在host:port字符串之后添加上這個根目錄,例
如,host1:port1,host2:port2,host3:port3/zk-base,這樣就指定了該客戶端連
接上ZooKeeper服務器之后,所有對ZooKeeper
的操作,都會基于這個根目錄。例如,客戶端對/sub-node 的操作,最終創建
/zk-node/sub-node, 這個目錄也叫Chroot,即客戶端隔離命名空間。

sessionTimeout?

會話的超時時間,是一個以“毫秒”為單位的整型值。在ZooKeeper中有
會話的概念,在一個會話周期內,ZooKeeper客戶端和服務器之間會通過心跳

測機制來維持會話的有效性,一旦在sessionTimeout時間內沒有進行有效
的心跳檢測,會話就會失效。

watcher

ZooKeeper允許
客戶端在構造方法中傳入一個接口 watcher (org.apache. zookeeper.
Watcher)的實現類對象來作為默認的 Watcher事件通知處理器。當然,該參
數可以設置為null 以表明不需要設置默認的 Watcher處理器。

canBeReadOnly

這是一個boolean類型的參數,用于標識當前會話是否支持“read-only(只
讀)”模式。默認情況下,在ZooKeeper集群中,一個機器如果和集群中過半

以上機器失去了網絡連接,那么這個機器將不再處理客戶端請求(包括讀寫請
求)。但是在某些使用場景下,當ZooKeeper服務器發生此類故障的時候,我

還是希望ZooKeeper服務器能夠提供讀服務(當然寫服務肯定無法提供)——
這就是 ZooKeeper的“read-only”模式。

sessionId和 ses
sionPasswd

分別代表會話ID和會話秘鑰。這兩個參數能夠唯一確定一個會話,同時客戶
端使用這兩個參數可以實現客戶端會話復用,從而達到恢復會話的效果。具體
使用方法是,第一次連接上ZooKeeper服務器時,通過調用ZooKeeper對象

例的以下兩個接口,即可獲得當前會話的ID和秘鑰:
long getSessionId();
byte[]getSessionPasswd( );
荻取到這兩個參數值之后,就可以在下次創建ZooKeeper對象實例的時候傳
入構造方法了

同步創建節點:
1 @Test
2 public void createTest() throws KeeperException, InterruptedException {
3 String path = zooKeeper.create(ZK_NODE, "data".getBytes(), ZooDefs.Ids.OPEN_A
CL_UNSAFE, CreateMode.PERSISTENT);
4 log.info("created path: {}",path);
5 }
異步創建節點:
1 @Test
2 public void createAsycTest() throws InterruptedException {
3 zooKeeper.create(ZK_NODE, "data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,
4 CreateMode.PERSISTENT,
5 (rc, path, ctx, name) ‐> log.info("rc {},path {},ctx {},name
{}",rc,path,ctx,name),"context");
6 TimeUnit.SECONDS.sleep(Integer.MAX_VALUE);
7 }
修改節點數據
1 @Test
2 public void setTest() throws KeeperException, InterruptedException {
3
4 Stat stat = new Stat();
5 byte[] data = zooKeeper.getData(ZK_NODE, false, stat);
6 log.info("修改前: {}",new String(data));
7 zooKeeper.setData(ZK_NODE, "changed!".getBytes(), stat.getVersion());
8 byte[] dataAfter = zooKeeper.getData(ZK_NODE, false, stat);
9 log.info("修改后: {}",new String(dataAfter));
10 }

什么是 Curator

Curator 是一套由netflix 公司開源的,Java 語言編程的 ZooKeeper 客戶端框架,Curator項目
是現在ZooKeeper 客戶端中使用最多,對ZooKeeper 版本支持最好的第三方客戶端,并推薦使
用,Curator 把我們平時常用的很多 ZooKeeper 服務開發功能做了封裝,例如 Leader 選舉、
分布式計數器、分布式鎖。這就減少了技術人員在使用 ZooKeeper 時的大部分底層細節開發工
作。在會話重新連接、Watch 反復注冊、多種異常處理等使用場景中,用原生的 ZooKeeper
處理比較復雜。而在使用 Curator 時,由于其對這些功能都做了高度的封裝,使用起來更加簡
單,不但減少了開發時間,而且增強了程序的可靠性。

Curator Caches:

Curator 引入了 Cache 來實現對 Zookeeper 服務端事件監聽,Cache 事件監聽可以理解為一
個本地緩存視圖與遠程 Zookeeper 視圖的對比過程。Cache 提供了反復注冊的功能。Cache 分
為兩類注冊類型:節點監聽和子節點監聽。

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

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

相關文章

Redis的主從架構

主從模式 全量同步 首先主從同步過程第一步 會先比較replication id 判斷是否是第一次同步假設為第一次同步 那么就會 啟動bgsave異步生成RDB 同時fork子進程記錄生成期間的新數據發送RDB給從節點 清空本地數據寫入RDB 增量同步 對比ReplicationID不同因此選擇增量同步在Rep…

新電腦軟件配置二:安裝python,git, pycharm

安裝python 地址 https://www.python.org/downloads/ 不是很懂為什么這么多版本 安裝windows64位的 這里我是憑自己感覺裝的了 然后cmd輸入命令沒有生效&#xff0c;先重啟下&#xff1f; 重啟之后再次驗證 環境是成功的 之前是輸入的python -version 命令輸入錯誤 安裝pyc…

docker 學習記錄

docker pull nginx docker 將本地nginx快照保存到當前文件夾下 docker save -o nginx.tar nginx:latestdocker 將本地nginx 加載 docker load -i nginx.tar docker運行nginx在80端口 docker run --name dnginx -p 80:80 -d nginxredis啟動 docker run --name mr -p 6379:6379 -…

什么是私有IP地址?如何判斷是不是私有ip地址

在互聯網的世界中&#xff0c;IP地址是設備之間通信的基礎標識。無論是瀏覽網頁、發送郵件還是在線游戲&#xff0c;IP地址都扮演著至關重要的角色。然而&#xff0c;并非所有的IP地址都是公開的&#xff0c;有些IP地址被保留用于內部網絡&#xff0c;這就是我們所說的私有IP地…

功能安全管理

一、功能安全整體管理 1、功能安全文化&#xff0c;良好的功能安全文化包括&#xff1a; 1&#xff09; 在公司層面&#xff0c;有清晰的組織架構支撐功能安全開展 2&#xff09; 確保有足夠的資源投入到功能安全開發中 3&#xff09; 有完整的功能安全培訓 4&#xff09; 流程…

異常日志規范

目錄 一、錯誤碼 二、異常處理 三、日志規約 一、錯誤碼 強制&#xff1a; 1、錯誤碼的制訂原則&#xff1a;快速溯源、溝通標準化。 1&#xff09;錯誤碼必須能夠快速知曉錯誤來源&#xff0c;可快速判斷是誰的問題。 2&#xff09;錯誤碼必須能夠清晰地比對&#xff08;…

SOLID 面對象設計的五大基本原則

SOLID 原則的價值 原則核心價值解決的問題SRP職責分離&#xff0c;提高內聚性代碼臃腫、牽一發而動全身OCP通過擴展而非修改實現變化頻繁修改現有代碼導致的風險LSP確保子類行為的一致性繼承濫用導致的系統不穩定ISP定制化接口&#xff0c;避免依賴冗余接口過大導致的實現負擔…

Python 裝飾器詳解

裝飾器是 Python 中一種強大的語法特性&#xff0c;它允許在不修改原函數代碼的情況下動態地擴展函數的功能。裝飾器本質上是一個高階函數&#xff0c;它接受一個函數作為參數并返回一個新的函數。 基本裝飾器 1. 簡單裝飾器示例 def my_decorator(func):def wrapper():prin…

無損耗協議:PROFINET和EtherNet IP網關的高效安裝指南

作為風力發電機組監控系統的重要組成部分&#xff0c;PROFINET和EtherNet/IP協議轉換網關倍訊BX-606-EIP的安裝至關重要。作為安裝工,我們要確保網關安裝的高效順利,保證風力發電機組的穩定運行。 首先,我們需要仔細檢查網關的硬件接口,確保所有連接線纜與設備端口相匹配。網關…

Axure元件動作四:設置選中

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝!如有幫助請訂閱專欄! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 課程主題:設置選中 主要內容:選中效果全面解析 應用場景:元件、元件組合需要被選中場景 案例展…

大模型為什么學新忘舊(大模型為什么會有災難性遺忘)?

字數&#xff1a;2500字 一、前言&#xff1a;當學霸變成“金魚” 假設你班上有個學霸&#xff0c;數學考滿分&#xff0c;英語拿第一&#xff0c;物理稱霸全校。某天&#xff0c;他突然宣布&#xff1a;“我要全面發展&#xff01;從今天起學打籃球&#xff01;” 一周后&am…

通過SMTP協議實現Linux郵件發送配置指南

一、環境準備與基礎配置 1. SMTP服務開通&#xff08;以qq郵箱為例&#xff09; 登錄qq郵箱網頁端&#xff0c;進入「設置」-「POP3/SMTP/IMAP」 開啟「SMTP服務」并獲取16位授權碼&#xff08;替代郵箱密碼使用&#xff09; 記錄關鍵參數&#xff1a; SMTP服務器地址&#…

react中安裝依賴時的問題 【集合】

目錄 依賴升級/更新 1、 npm install --save-dev 與 npm install 的區別 1. ?安裝位置&#xff08;依賴類型&#xff09;? 2. ?package.json 中的區別? 3. ?示例 4. ?何時使用哪種方式? 2、npm install 和 yarn add 有什么不一樣嗎 ?命令語法?&#xff1a; …

Coze 實戰教程 | 10 分鐘打造你的AI 助手

> 文章中的 xxx 自行替換&#xff0c;文章被屏蔽了。 &#x1f4f1; 想讓你的xxx具備 AI 對話能力&#xff1f;本篇將手把手教你&#xff0c;如何用 Coze 平臺快速構建一個能與用戶自然交流、自動回復提問的 xxx助手&#xff0c;零代碼、超高效&#xff01; &#x1f4cc;…

【Spring Cloud Gateway】Nacos整合遇坑記:503 Service Unavailable

一、場景重現 最近在公司進行微服務架構升級&#xff0c;將原有的 Spring Cloud Hoxton 版本升級到最新的 2021.x 版本&#xff0c;同時使用 Nacos 作為服務注冊中心和配置中心。在完成基礎框架搭建后&#xff0c;我使用 Spring Cloud Gateway 作為API 網關&#xff0c;通過 N…

寶塔面板屏蔽垃圾搜索引擎蜘蛛和掃描工具的辦法

首先進入寶塔面板&#xff0c;文件管理進入/www/server/nginx/conf目錄&#xff0c;新建空白文件kill_bot.conf。然后將以下代碼保存到當前文件中。 #禁止垃圾搜索引擎蜘蛛抓取if ($http_user_agent ~* "CheckMarkNetwork|Synapse|Nimbostratus-Bot|Dark|scraper|LMAO|Ha…

Docker拉取鏡像報錯Error response from daemon: Get “https://registry-1.docker.io/v2/“

記一次Docker拉取鏡像的報錯 使用docker拉取鏡像時&#xff0c;出現報錯 [rootcentos8 ~]# sudo docker pull mysql:8.0 Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.T…

Ansible模塊——文件內容修改

修改文件單行內容 ansible.builtin.lineinfile 可以按行修改文件內容&#xff0c;一次修改一行&#xff0c;支持正則表達式。 選項名 類型 默認值 描述 attributesstrnull 設置目標文件的 Linux 文件系統屬性&#xff08;attribute bits&#xff09;&#xff0c;作用類似于…

如何用PDO實現安全的數據庫操作:避免SQL注入

如何用PDO實現安全的數據庫操作&#xff1a;避免SQL注入 在現代Web應用程序中&#xff0c;數據庫操作是核心功能之一。然而&#xff0c;SQL注入是一種常見的安全漏洞&#xff0c;攻擊者可以通過惡意輸入來操控數據庫&#xff0c;從而獲取敏感信息或破壞數據。使用PHP的PDO&…

使用大語言模型從零構建知識圖譜(中)

從零到一&#xff1a;大語言模型在知識圖譜構建中的實操指南 ©作者|Ninja Geek 來源|神州問學 還沒有看過上篇的讀者可以閱讀《使用大語言模型從零構建知識圖譜&#xff08;上&#xff09;》了解整個系列的內容 通過創建一個自定義流程來自動上傳業務數據 在這一節&#…