Zookeeper三個監聽案例

来源:https://www.cnblogs.com/HelloBigTable/archive/2019/02/25/10434204.html
-Advertisement-
Play Games

一、監聽某一節點內容 二、監聽某節點目錄的變化 三、Zookeeper當太上下線的感知系統 1.需求:某分散式系統中,主節點有多台,可以進行動態上下限,當有任何一臺機器發生了動態的上下線, 任何一臺客戶端都能感知得到 2.思路: (1)創建客戶端與服務端 (2)啟動client端 並監聽 (3)啟動 ...


一、監聽某一節點內容

/**
 * @author: PrincessHug
 * @date: 2019/2/25, 14:28
 * @Blog: https://www.cnblogs.com/HelloBigTable/
 * 監聽一個節點內容的變化
 */
public class WatchZoneDemo {
    ZooKeeper zkCli = null;

    public static void main(String[] args) throws IOException, InterruptedException {
        WatchZoneDemo wz = new WatchZoneDemo();
        wz.getConnection();
        Thread.sleep(Long.MAX_VALUE);
    }

    private void getConnection() throws IOException {
        zkCli = new ZooKeeper("192.168.126.128:2181,192.168.126.129:2181,192.168.126.130:2181", 3000, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                try {
                    byte[] data = zkCli.getData("/Wyh", true, null);
                    System.out.println("監聽類型為:" + watchedEvent.getType());
                    System.out.println("監聽路徑為:" + watchedEvent.getPath());
                    System.out.println("數據被修改為:" + new String(data));
                    System.out.println("=======================================");
                } catch (KeeperException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

二、監聽某節點目錄的變化

/**
 * @author: PrincessHug
 * @date: 2019/2/25, 14:57
 * @Blog: https://www.cnblogs.com/HelloBigTable/
 * 監聽一個節點的子節點的變化
 */
public class WatchChildrenDemo {
    ZooKeeper zkCli = null;

    public static void main(String[] args) throws IOException, InterruptedException {
        WatchChildrenDemo wc = new WatchChildrenDemo();
        wc.getConnction();
        Thread.sleep(Long.MAX_VALUE);
    }

    private void getConnction() throws IOException {
        zkCli = new ZooKeeper("192.168.126.128:2181,192.168.126.129:2181,192.168.126.130:2181", 3000, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                ArrayList<String> nodes = new ArrayList<String>();
                try {
                    List<String> children = zkCli.getChildren("/", true);
                    for (String c:children){
                        nodes.add(c);
                    }
                    System.out.println(nodes);
                } catch (KeeperException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

三、Zookeeper當太上下線的感知系統

  1.需求:某分散式系統中,主節點有多台,可以進行動態上下限,當有任何一臺機器發生了動態的上下線, 任何一臺客戶端都能感知得到

  2.思路:

    (1)創建客戶端與服務端

    (2)啟動client端 並監聽

    (3)啟動server端 並註冊

    (4)當server端發生上下線

    (5)client端都能感知的到

  3.代碼

public class ZKServer {
    ZooKeeper zk = null;
    private String parentNode = "/Servers";

    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
        String childNode = "hd1-1";
        ZKServer zkServer = new ZKServer();
        //獲取連接
        zkServer.getConnection();
        //註冊信息
        zkServer.regist(childNode);
        //業務邏輯,提示上線
        zkServer.build(childNode);

    }

    private void build(String hostname) throws InterruptedException {
        System.out.println(hostname + "上線了!!");
        Thread.sleep(Long.MAX_VALUE);
    }

    private void regist(String hostname) throws KeeperException, InterruptedException {
        String path = zk.create(parentNode + "/server", hostname.getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
        System.out.println(path);
    }

    private void getConnection() throws IOException {
        zk = new ZooKeeper("192.168.126.128:2181,192.168.126.129:2181,192.168.126.130:2181", 3000, new Watcher() {
            public void process(WatchedEvent watchedEvent) {

            }
        });
    }
}

public class ZKClient {
    ZooKeeper zk = null;
    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
        ZKClient zkClient = new ZKClient();
        zkClient.getConnection();
        zkClient.watching();
    }

    private void watching() throws InterruptedException {
        Thread.sleep(Long.MAX_VALUE);
    }

    private void getConnection() throws IOException {
        zk = new ZooKeeper("192.168.126.128:2181,192.168.126.129:2181,192.168.126.130:2181", 3000, new Watcher() {
            public void process(WatchedEvent watchedEvent) {
                try {
                    List<String> children = zk.getChildren("/Servers", true);
                    ArrayList<String> node = new ArrayList<String>();
                    for (String c:children){
                        byte[] data = zk.getData("/Servers/" + c, true, null);
                        node.add(new String(data));
                    }
                    System.out.println(node);
                } catch (KeeperException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Fixed-Point Designer™ 提供開發定點和單精度演算法所需的數據類型和工具,以在嵌入式硬體上進行性能優化。Fixed-Point Designer 會分析您的設計並提供建議的數據類型和屬性,例如字長和定標。您可以指定詳細的數據屬性,如舍入模式和溢出操作,以及混合單精度和定點數據。您可以 ...
  • win7下建立超級隱藏賬戶 實驗目的: 隱藏用戶,不讓管理員簡單的發現 隱藏方法: 1.命令提示符中創建隱藏賬戶這種方法只能將賬戶在"命令提示符"中進行隱藏,而對於"電腦管理"則無能為力。因此這種隱藏賬戶的方法並不是很實用,只對那些粗心的管理員有效,是一種入門級的系統賬戶隱藏技術 2. 註冊表隱藏 ...
  • --crontab檢查是否安裝[oracle@rac1 ~]$ rpm -qa | grep crontabcrontabs-1.10-8啟動與關閉[oracle@rac1 ~]$ /etc/init.d/crond stop/start/restart/reload全局配置文件[root@rac1 ...
  • 1.運行 gpedit.msc →computer configuration→administrative templates→windows componets→Remote Desktop→Remote Desktop session host→Connections→Limit number ...
  • 在Linux系統下,有七類文件類型: 普通文件( ) 目錄(d) 軟鏈接(字元鏈接L) 套接字文件(S) 字元設備(S) 塊設備(B) 管道文件(命名管道P) 普通文件、目錄、軟鏈接無需多解釋。 管道文件 管道分為 匿名管道和命名管道 。管道都是一端寫入、另一端讀取,它們是單方向數據傳輸的,它們的數 ...
  • 首先添加php官方源 $ sudo add-apt-repository ppa:ondrej/php 然後更新源 $ sudo apt-get update 然後安裝 $ sudo apt-get install php7.0 php7.0-cli php7.0-fpm php7.0-gd php ...
  • 轉自:http://www.maomao365.com/?p=8102 摘要: 下文講述向已存在表上添加新欄位及欄位備註的方法,如下所示: 實驗環境:sql server 2008 R2 1. 添加新欄位及欄位備註的語法USE 資料庫名ALTER TABLE 表名 ADD 欄位名 類型 預設值 是否 ...
  • 最近項目升級,需要把原來的oracle版本改為sql server版本。由於項目的分層設計,主要的修改內容也就是存儲過程,sql語句。如今改的七七八八,整理一下踩過的坑,備忘! ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...