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() { @Override public 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() { @Override public 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架構師,:
相關推薦
Zookeeper應用:服務端上下線
需求 客戶端感知伺服器的上下線。 示意圖 步驟 服務端: 1、所有機子向Zookeeper註冊,註冊znode為臨時的。 2、有機子下線,連線斷開後被Zookeeper自動刪除,觸發監聽事件。
Docker下Java檔案上傳服務三部曲之二:服務端開發
本章是《Docker下Java檔案上傳服務三部曲》的第二篇,上一章《Docker下Java檔案上傳服務三部曲之一:準備環境》我們把客戶端準備好了,Tomcat容器也部署好了,今天就來開發和部署檔案服務的後臺應用吧; 本章實戰內容概要 本章要建立三個w
ZooKeeper系列之(十二):服務端實現機制
服務端有3種執行方式:leader,follower,observer。leader是領導者,一個ZooKeeper叢集同一時刻最
Netty入門一:服務端應用搭建 & 啟動過程原始碼分析
最近週末也沒啥事就學學Netty,同時打算寫一些部落格記錄一下(寫的過程理解更加深刻了) 本文主要從三個方法來呈現:Netty核心元件簡介、Netty服務端建立、Netty啟動過程原始碼分析 如果你對Netty有一定的瞭解, 那閱讀起來應該會比較愉快 ## Netty核心元件簡介 ### ByteBu
Token:服務端身份驗證的流行方案
rst 服務 方案 app 過程 組件圖 wav hit margin 01- 身份認證 服務端提供資源給客戶端,但是某些資源是有條件的。所以服務端要能夠識別請求者的身份,然後再判斷所請求的資源是否可以給請求者。 token是一種身份驗證的機制,初始時用戶提交賬號數據
在CentOS7上安裝ftp服務器用於保存服務端上傳的圖片。
如果 mef get 匿名用戶 使用 list 文件 led 添加 1、CentOS卸載vsftpd的方法 如果服務器上已經安裝了vsftpd服務,配置出錯需要卸載vsftpd服務。 1.1 查找vsftpd服務 [root@localhost /]# rpm -a
EMQ 學習---訂閱$SYS主題,捕獲客戶端上下線消息
str 發出 .config 客戶端 ddr config文件 禁止 打開 dashboard acl.config文件定義了可訂閱$SYS主題的權限。 {allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}. {allo
java_客戶端向服務端上傳mp3檔案資料
客戶端: package cn.itcast.uploadpicture.demo; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import j
LDAP基礎:10:服務端工具:使用phpLDAPadmin進行操作
在上篇文章中介紹瞭如何使用Apache Directory Studio的客戶端來操作LDAP,但是這種方式需要安裝客戶端工具。在這篇文章裡將介紹伺服器端的工具phpLDAPadmin,這樣使用者通過瀏覽器即可獲得對於OpenLdap操作的能力。 事前準備 docker-comp
使用TCP協議,分別編寫服務端和客戶端,要求客戶端向服務端上傳檔案。(使用字元流完成)
package Test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.IOException; import java.io
EasyDarwin開源流媒體伺服器Golang版本:服務端錄影功能釋出
EasyDarwin開源流媒體伺服器(www.easydarwin.org)現在使用Go版本實現了。最新的程式碼提交,已經支援了推流(或者拉流)的同時進行本地儲存。 本地儲存的原理,是在推流的同時啟動ffmpeg作為一路Client來做儲存。ffmpeg在demux和mux的工作方面已經
三週學會小程式第三講:服務端搭建和部署
通過第二講我們已經知道了怎麼快速搭建一個小程式客戶端,當然服務端也是必不可少的。登入驗證,內容儲存等等都離不開服務端。 本章節主要講解怎麼快速搭建一個服務端框架和免費部署。因為好多同學僅僅為了學習小程式,為此購買一個伺服器成本還是蠻高的,所以小編特此找了一種免費的服務資源提供給大家,等到你真正要部署小程式的時
關於Spring Cloud Eureka對服務的上下線監控(重點),續約,註冊,啟動等
關於Spring Cloud Eureka對服務的上下線監控(重點),續約,註冊,啟動等 專案上監聽各個服務宕機後的資訊,提供eureka的5個監聽器 EurekaInstanceCanceledEvent 服務下線事件 EurekaInstanceRegisteredEvent 服務註
Java之TCP傳輸小Demo(無執行緒):服務端
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public c
Netty4.x原始碼分析:服務端接受客戶端Channel連線
引包 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> &l
zookeeper 原始碼:客戶端連線過程
可能我們直接使用 zookeeper 的機會並不多,甚至都不會直接去使用,但是 zookeeper 作為分散式協調框架,在如今分散式系統領域有著非常大的作用,很多流行框架都有使用它,如分散式治理框架 dubbo,大資料領域中的 hbase,所以瞭解 zookee
MFC——socket程式設計(淺出+深度:服務端和客戶端埠問題)
要寫網路程式就必須用Socket,這是程式設計師都知道的。而且,面試的時候,我們也會問對方會不會Socket程式設計?一般來說,很多人都會說,Socket程式設計基本就是listen,accept以及send,write等幾個基本的操作。是的,就跟常見的檔案操作一樣,只要寫過就一定知道。 對於網路程式設計,
JavaNIO Java進階知識點5:服務端高併發的基石 - NIO與Reactor模式以及AIO與Proactor模式
javaNIO對於多路複用io(同步非阻塞io)的實現 package test; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.channels.SelectionKey; import
Android訪問網路:服務端返回XML或JSON格式資料,Android 進行解析並使用ListView顯示
剛剛入門學習了Android的ListView,也是看了傳智播客黎活明老師的視訊學習了,但是一直執行不了,還報錯了。報的錯誤是:at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.jav
Android音訊實時傳輸與播放(二):服務端
我偷懶就用java寫了個簡單的伺服器,大家明白原理就好。 服務端共開放兩個埠,一個udp上行埠用來接收amr音訊流,另一個tcp下行埠用來發送amr音訊流。 我這裡寫的服務端實現了組播的功能,即一個人在錄音,可以同時讓很多人同時聽到。 簡而言之,服務端做的唯一一件