Zookeeper應用:服務端上下線


需求

客戶端感知服務器的上下線。


示意圖


步驟

服務端:

1、所有機子向Zookeeper注冊,注冊znode為臨時的。

2、有機子下線,連接斷開后被Zookeeper自動刪除,觸發監聽事件。

3、有機子上線,觸發監聽事件。


客戶端:

1、連接Zookeeper,獲取服務器注冊的znode,getchildren(),并注冊監聽。

2、當Zookeeper觸發監聽,會rpc遠程調用process。

3、process調用getchildren().


服務端代碼

package hello.zookeeper.schange;import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;public class Server {private String connUrl = "zk1:2181,zk2:2181,zk3:2181";private int outTime = 1000;private String parentNode="/servers/";//Zookeeper先建好這個持久節點private ZooKeeper zk = null;public void getConnection() throws Exception {zk = new ZooKeeper(connUrl, outTime, new Watcher() {@Overridepublic void process(WatchedEvent event) {System.out.println("Server Watcher:" + event.getType() + "---" + event.getPath());}});}public void registerServer(String server) throws Exception {String msg = zk.create(parentNode+server, server.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);System.out.println("registerServer:" + msg);}public static void main(String[] args) throws Exception {String name = "server4";Server server = new Server();server.getConnection();server.registerServer(name);System.out.println(name + "----start------");Thread.sleep(Long.MAX_VALUE);}}


客戶端代碼

package hello.zookeeper.schange;import java.util.List;import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;public class Client {private String connUrl = "zk1:2181,zk2:2181,zk3:2181";private int outTime = 1000;private String parentNode="/servers";private ZooKeeper zk = null;public void getConnection() throws Exception {zk = new ZooKeeper(connUrl, outTime, new Watcher() {@Overridepublic void process(WatchedEvent event) {System.out.println("Client Watcher:" + event.getType() + "---" + event.getPath());try {getServerList();} catch (Exception e) {e.printStackTrace();}}});}public void getServerList() throws Exception{List<String> children = zk.getChildren(parentNode, true);if(children!=null&&children.size()>0){System.out.println("服務器列表如下:");for(String child:children){System.out.println(child);}}}public static void main(String[] args) throws Exception {Client client=new Client();client.getConnection();client.getServerList();Thread.sleep(Long.MAX_VALUE);}}


運行結果

開了4臺服務端,3臺客戶端



Zookeeper里/servers節點下有4臺注冊在線的服務器



客戶端運行獲取服務端列表



服務器下線一臺,三個客戶端都受到通知




-------------

更多的Java,Angular,Android,大數據,J2EE,Python,數據庫,Linux,Java架構師,:

http://www.cnblogs.com/zengmiaogen/p/7083694.html


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

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

相關文章

哈希表查找失敗的平均查找長度_你還應該知道的哈希沖突解決策略

本文首發于 vivo互聯網技術 微信公眾號 鏈接&#xff1a;https://mp.weixin.qq.com/s/5vxYoeARG1nC7Z0xTYXELA作者&#xff1a;Xuegui Chen哈希是一種通過對數據進行壓縮, 從而提高效率的一種解決方法&#xff0c;但由于哈希函數有限&#xff0c;數據增大等緣故&#xff0c;哈希…

hive 創建訪問用戶_hive創建角色并賦權

1 角色管理命令1.1 創建角色創建一個新角色&#xff0c;需要 admin 用戶執行CREATE ROLE role_name;1.2 刪除角色刪除一個角色&#xff0c;需要 admin 用戶執行DROP ROLE role_name;1.3 顯示當前角色顯示用戶當前角色列表SHOW CURRENT ROLES;1.4 設定角色如果指定了role_name&a…

python 正則替換_5分鐘速覽Python正則表達式常用函數!五分鐘就掌握它!

導讀&#xff1a;正則表達式是處理字符串類型的"核武器"&#xff0c;不僅速度快&#xff0c;而且功能強大。本文不過多展開正則表達式相關語法&#xff0c;僅簡要介紹python中正則表達式常用函數及其使用方法&#xff0c;以作快速查詢瀏覽。01 Re概覽Re模塊是python的…

MFC鼠標OnMouseHover使用

ON_WM_MOUSEHOVER消息要生效,要配合ON_WM_MOUSEMOVE一起使用.代碼如下:void CYuButton::OnMouseMove(UINT nFlags, CPoint point) {// TODO: 在此添加消息處理程序代碼和/或調用默認值TRACKMOUSEEVENT tme { 0 };tme.cbSize sizeof(TRACKMOUSEEVENT);tme.dwFlags TME_HOVER…

oracle 分組_大數據分組怎樣才會更快

分組是數據庫的常見運算&#xff0c;無論數據如何準備&#xff0c;通常都需要將所有數據遍歷。建立索引這時是不起作用的&#xff0c;存儲格式才是決定遍歷效率的主要因素。數據庫中數據的存放雖然是二進制格式的&#xff0c;但普遍IO性能差&#xff0c;庫內遍歷快&#xff0c;…

java下拉樹_參數模板中下拉樹級聯下拉數據集查詢

背景說明在參數表單的制作中會遇到各種各樣的需求&#xff0c;如為了方便參數的輸入&#xff0c;需要將輸入框設計成樹狀&#xff1b;若參數模板中有兩個輸入框&#xff0c;每個輸入框對應的參數有某種關系&#xff0c;前一個輸入框輸入參數后&#xff0c;后一個輸入框自動關聯…

java8 list 行轉列_太贊了,Intellij IDEA 竟然把 Java8 的數據流問題這么完美的解決掉了!

使用 IntelliJ IDEA 來幫忙構建你自己的實時模板連接分組《Java 2019 超神之路》《Dubbo 實現原理與源碼解析 —— 精品合集》《Spring 實現原理與源碼解析 —— 精品合集》《MyBatis 實現原理與源碼解析 —— 精品合集》《Spring MVC 實現原理與源碼解析 —— 精品合集》《Spr…

線程run方法和start方法的區別

區別 run() 只是一個普通的方法調用&#xff0c;不會開啟新的線程。 start() 會開啟新的線程&#xff0c;分配新的資源。里面的變量互不影響。 實例 package multithreading;public class MyThread extends Thread {String flag;public MyThread(String flag) {this.flag…

字典的拼接方法

剛看到覺得很簡單 試著用 d3 dict1 dict2 就解決了 結果 報類型錯誤 后來想去遍歷 在組合越想越麻煩 下面分享幾個方法 d1 {"name":"luoyong","age":36}d2 {"class":"AID1712","start":"python"}方…

python反射、閉包、裝飾器_python 閉包裝飾器(一)

一、閉包1.舉例defouter():x 10def inner(): #內部函數print(x) #外部函數的一個變量returninner#調用inner()函數的方法outer()() #法一fouter()f()#法二注意&#xff1a;inner()是局部變量&#xff0c;在全局范圍不可調用(即不能直接調用inner()函數)&#xff0c;但是在法二中…

java list集合自定義排序_Java 通過 Comparator comparing 對 list 自定義 排序

摘要&#xff1a;在日常開發中&#xff0c;經常會用到排序算法&#xff0c;這里記錄下日常使用比較多的排序方法&#xff0c;其中包括按指定指定&#xff1a;正序、倒序排序&#xff0c;還有按自定義字段排序的方法&#xff0c;方便日后查看&#xff1b;一&#xff1a;按指定字…

beautifulsoup爬取網頁中的表格_用 Python 爬取網頁

來自公眾號&#xff1a;優達學城Udacity作者&#xff1a;Kerry Parker編譯&#xff1a;歐剃作為數據科學家的第一個任務&#xff0c;就是做網頁爬取。那時候&#xff0c;我對使用代碼從網站上獲取數據這項技術完全一無所知&#xff0c;它偏偏又是最有邏輯性并且最容易獲得的數據…

Java中Runnable和Thread的區別

概述 Runnable 是接口。 Thread 是類&#xff0c;且實現了Runnable接口。 Thread部分源碼 public class Threadimplements Runnable {private static class Caches{static final ConcurrentMap subclassAudits new ConcurrentHashMap();static final ReferenceQueue subcla…

python 神經網絡工具_神經網絡15分鐘入門!使用python從零開始寫一個兩層神經網絡...

本篇是該系列的第三篇&#xff0c;建議在閱讀本篇文章之前先看前兩篇文章。在本文中將使用python實現之前描述的兩層神經網絡&#xff0c;并完成所提出的“象限分類”的問題。需要注意的是&#xff0c;雖然標題叫做神經網絡15分鐘入門&#xff0c;但是到這篇文章&#xff0c;對…

12.3目錄結構

目錄結構 設計好目錄結構 可讀性高可維護性高比如一個Foo項目Foo/--- bin/--- foo--- foo/--- tests/--- _init__.py--- test_main.py--- init.py--- main.py---doc--- conf.py---abc.rst--- setup.py--- requirement.txt--- README簡要解釋一下&#xff1a; bin/:存放項目的一…

pyecharts添加文字_超燃的文字云效果,用Python就能輕松get!

本文轉載自公眾號&#xff1a;數據森麟(ID&#xff1a;shujusenlin)作者&#xff1a;葉庭云鏈接&#xff1a;https://blog.csdn.net/fyfugoyfa/ 01 / 詞云圖詞云圖是一種用來展現高頻關鍵詞的可視化表達&#xff0c;通過文字、色彩、圖形的搭配&#xff0c;產生有沖擊力地視覺效…

同步關鍵詞synchronized

概述 synchronized是java中的一個關鍵字&#xff0c;也就是說是Java語言內置的特性。 synchronized( 一個任意的對象&#xff08;鎖&#xff09; ){ 代碼塊中放操作共享數據的代碼。 } public synchronized int getIndex() {return 1;}public static synchronized int getN…

python連接mysql用哪個模塊_Python連接MySQL數據庫之pymysql模塊使用

Python3連接MySQL本文介紹Python3連接MySQL的第三方庫--PyMySQL的基本使用。PyMySQL介紹PyMySQL 是在 Python3.x 版本中用于連接 MySQL 服務器的一個庫&#xff0c;Python2中則使用mysqldb。Django中也可以使用PyMySQL連接MySQL數據庫。PyMySQL安裝pip install pymysql連接數據…

mysql 創建視圖 主鍵_MySQL數據庫基礎操作命令,本文助你更上一層樓!

今天介紹的是關于Mysql數據庫一些操作的基礎命令用戶與權限創建用戶mysql>create user test identified by BaC321#; 修改密碼5.5版本及以前的命令mysql>set password for testpassowrd(!1A2#3); 5.6及以上命令mysql>update mysql.user set authentication_stringpass…

mysql 聚合函數 怎么用在條件里_MySql 中聚合函數增加條件表達式的方法

Mysql 與聚合函數在一起時候where條件和having條件的過濾時機where 在聚合之前過濾當一個查詢包含了聚合函數及where條件&#xff0c;像這樣的情況select max(cid) from t where t.id<999這時候會先進行過濾&#xff0c;然后再聚合。先過濾出ID《999的記錄&#xff0c;再查找…