dubbo源碼解析-zookeeper創建節點

前言

在之前dubbo源碼解析-本地暴露中的前言部分提到了兩道高頻的面試題,其中一道dubbo中zookeeper做注冊中心,如果注冊中心集群都掛掉,那發布者和訂閱者還能通信嗎?在上周的dubbo源碼解析-zookeeper連接中已經講到,這周解析的是另一道,即服務提供者能實現失效踢出是根據什么原理?

上周就有朋友問到我,為什么我的源碼解析總是偏偏要和面試題掛上鉤呢?原因很簡單

1.dubbo源碼這么多,試問你從哪里做為切入點?也就是說該從哪里看起?所以以面試題為切入點,你可以理解為我是在回答"怎么看源碼"這個問題.

2.我們研發飛機大炮并不是為了侵略,有時候可能只是單純的想保護自己.

3.我的源碼解析雖然以面試題為基礎,但卻不以面試為目的.因為面試如果問到dubbo的問題,絕大多數都是官方文檔的內容,根本就沒到需要看源碼的程度.看源碼的最終目的是為了解決實際問題,后面我會以實際的問題為例子,實戰講一講看源碼我究竟解決了什么網上搜不到,必須要看源碼才能弄清楚的問題.所以現在就可以大膽在簡書關注肥朝,已免后面錯過精彩內容.

插播面試題

  • 服務提供者能實現失效踢出是什么原理(高頻題)

  • zookeeper的有哪些節點,他們有什么區別?講一下應用場景

直入主題

同上周的zookeeper連接一樣,這周我們講的還是一行代碼,如下圖

那么我們打上斷點開始

下面就要開始創建節點了

現在我們雖然看完源碼了,但是還是沒法回答面試題?那么下面就要敲黑板劃重點了

敲黑板畫重點

zookeeper中節點是有生命周期的.具體的生命周期取決于節點的類型.節點主要分為持久節點(Persistent)臨時節點(Ephemeral),但是更詳細的話還可以加上時序節點(Sequential),創建節點中往往組合使用,因此也就是4種.

  • 持久節點
  • 持久順序節點
  • 臨時節點
  • 臨時順序節點

其實不要糾結于分為幾種,這就和語文的斷句一樣,你斷句的方法不同,斷出來的結果也不同.那么我們主要講講持久節點臨時節點的區別

持久節點

所謂持久節點,是指在節點創建后,就一直存在,直到有刪除操作來主動清除這個節點,也就是說不會因為創建該節點的客戶端會話失效而消失

臨時節點

臨時節點的生命周期和客戶端會話綁定,也就是說,如果客戶端會話失效,那么這個節點就會自動被清除掉

應用場景

zookeeper常用的應用場景我在上周已經畫了思維導圖,這里就不重復展示了.就拿分布式協調/通知來舉例(這個例子既是在回答第一個面試題,也是在回答第二個面試題).

在分布式系統中,我們常常需要知道某個機器是否可用,傳統的開發中,可以通過Ping某個主機來實現,Ping得通說明對方是可用的,相反是不可用的,ZK 中我們讓所有的機其都注冊一個臨時節點,我們判斷一個機器是否可用,我們只需要判斷這個節點在ZK中是否存在就可以了,不需要直接去連接需要檢查的機器,降低系統的復雜度

寫在最后

集群容錯后,服務發布的內容講得也差不多了.下周來和大家一起對服務發布做一個總結.期待下周繼續與你相遇.鑒于本人才疏學淺,不對的地方還望斧正,也歡迎關注我的簡書,名稱為肥朝




dubbo使用的 zkclient 會自動給 zookeeper發送心跳檢測的
18:29:10.363 [main-SendThread(114.67.228.245:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x165add7ce0d000e after 9ms
18:29:20.363 [main-SendThread(114.67.228.245:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x165add7ce0d000e after 9ms
18:29:30.366 [main-SendThread(114.67.228.245:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x165add7ce0d000e after 9ms
18:29:40.369 [main-SendThread(114.67.228.245:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x165add7ce0d000e after 11ms
18:29:50.366 [main-SendThread(114.67.228.245:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x165add7ce0d000e after 8ms
18:30:00.369 [main-SendThread(114.67.228.245:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x165add7ce0d000e after 9ms
18:30:10.370 [main-SendThread(114.67.228.245:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Got ping response for sessionid: 0x165add7ce0d000e after 9ms
測試發送心跳代碼 會自動打印出debug的日志
package com.TestZookeeper;import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;public class ZookerProgram {//zookeeper連接地址private static final String CONNECT_ADR="XX.XX.XX.XX:2181";public static void main(String[]args)  throws Exception{ZkClient zkClient = new ZkClient(CONNECT_ADR,5000);String path="/qq";System.out.println("鏈接成功");zkClient.createEphemeral(path,"contentaaa");System.out.println("創建臨時節點成功");//  String msg=   zkClient.getChildren("/qq");
zkClient.subscribeDataChanges(path, new IZkDataListener() {public void handleDataDeleted(String dataPath) throws Exception {System.out.println("Node " + dataPath + " deleted.");}public void handleDataChange(String dataPath, Object data) throws Exception {System.out.println("Node " + dataPath + " changed, new data: " + data);}});System.out.println("關閉前:"+zkClient.getCreationTime(path));
//       zkClient.close();
//        System.out.println("關閉后:"+zkClient.getCreationTime(path));// zkClient.writeData(path,"456");//   Thread.sleep(1000);//   zkClient.delete(path);
       Thread.sleep( Integer.MAX_VALUE );}}

?

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

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

相關文章

配置mysql為主主復制步驟

mysql版本:mysql-5.6.24-solaris10-sparc-64bit.tar 操作系統:solaris 11g u10 操作用戶:使用非root進行操作安裝,a路服務器ip地址為192.168.1.1 b路ip地址為192.168.1.2(應改為實際ip地址) 1,安…

XunSearch的使用

一、項目的配置文件 1、要想使用xunsearch,首先需要進行配置文件的配置。 默認目錄在app下,如下面的結構,每一個搜索項目都需要有一個ini文件進行相應的配置。 舉例: project.name novel project.default_charset utf-8 serv…

《VMware vSphere設計(原書第2版)》——1.1 什么是設計

本節書摘來自華章出版社《VMware vSphere設計(原書第2版)》一 書中的第1章,第1.1節,作者:[美] 福布斯格思里(Forbes Guthrie)斯科特羅威(Scott Lowe)肯德里克科爾曼&…

SqlKata - 方便好用的 Sql query builder

SqlKata查詢生成器是一個用C# 編寫的功能強大的Sql查詢生成器。它是安全的,與框架無關。靈感來源于可用的頂級查詢生成器,如Laravel Query Builder和 Knex:https://knexjs.org/。SqlKata有一個富有表現力的API。它遵循一個干凈的命名約定&…

編寫高質量代碼:改善Java的151個建議四(基本類型)21-30

該書籍PDF下載地址:http://download.csdn.net/download/muyeju/10001473 基本類型有8個:byte,short,int,char,long,double,float,boolean 21.用偶判斷,不用奇…

ABP vNext微服務架構詳細教程(補充篇)——單層模板(下)

業務代碼2聚合服務聚合服務層和基礎服務層相同的道理,在Demo.Core.Contracts增加Services文件夾,并添加Notifications子文件夾,在其中添加Dtos文件夾并添加兩個DTO與基礎服務對應:using Volo.Abp.Application.Dtos;namespace Demo…

PHP 電子商城基本數據表

1、品牌表 tp_brand CREATE TABLE tp_brand (id smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 品牌表,name varchar(60) NOT NULL DEFAULT COMMENT 品牌名稱,logo varchar(80) NOT NULL DEFAULT COMMENT 品牌logo,desc text NOT NULL COMMENT 品牌描述,url varcha…

摘要,日志

1.hashlib 模塊: 由于數據的不安全性,為了保證用戶的信息絕對安全,所有所有人的賬號密碼不能以明文的形式存儲, 而是經過適當的處理以密文的形式存儲. hashlib對同一個字符串在不同的語言,不同的環境(操作系統,版本,時間)中加密得到的是同一個密文串,不同的字符串得到的密文是不…

《網站情感化設計與內容策略》一第1章 情感化設計1.1 革命:有失亦有得

本節書摘來自異步社區《網站情感化設計與內容策略》一書中的第1章,第1.1節,作者 【美】Aarron Walter , Erin Kissane,更多章節內容可以訪問云棲社區“異步社區”公眾號查看 第1章 情感化設計 網站情感化設計與內容策略 1.1 革命&#xff1…

php自動加載機制的實現

一、什么是自動加載 自動加載就是當我們在當前文件中實例化一個不存在的類時,調用自動加載機制引入相應的類文件。 注:自動加載有兩種方式(都是php內置的),一種是通過__autoload(),另一種是通過spl_autoload_registe…

MySQL之 從復制延遲問題排查

一、從庫復制延遲問題 1、可能的原因如下(1)主從服務器處于不同的網絡之中,由于網絡延遲導致;(2)主從服務器的硬件配置不同,從服務器的硬件配置(包括內存,CPU&#xff0c…

《樹莓派滲透測試實戰》——2.12 用例子總結以上步驟

本節書摘來異步社區《樹莓派滲透測試實戰》一書中的第2章,第2.12節,作者【美】Joseph Muniz(約瑟夫 穆尼斯) , Aamir Lakhani(阿米爾 拉克哈尼),更多章節內容可以訪問云棲社區“異步社區”公眾號…

申請成為qq互聯個人開發者步驟(注意事項)2018

一、官方網址 官方地址:https://connect.qq.com/manage.html#/ 二、申請時注意事項: 1、申請時的名稱欄必須填寫身份證上的姓名,否則是不給通過的 2、上傳照片時,需要本人手持身份證,重點是照片中身份證上頭像的位置要…

《Swift開發實戰》——第1章,第1.4節啟動iOS 8模擬器

本節書摘來自異步社區《Swift開發實戰》一書中的第1章,第1.4節啟動iOS 8模擬器,作者 李寧,更多章節內容可以訪問云棲社區“異步社區”公眾號查看 1.4 啟動iOS 8模擬器Xcode是一款功能全面的應用程序,通過此工具可以輕松輸入、編譯…

基于.NetCore開發博客項目 StarBlog - (18) 實現本地Typora文章打包上傳

1前言九月太忙,只更新了三篇文章,本來這個功能是從九月初就開始做的,結果一直拖到現在國慶假期才有時間完善并且寫文章~之前我更新了幾篇關于 Python 的文章,有朋友留言問是不是不更新 .Net 了,那肯定不能啊&#xff0…

《算法導論》讀書筆記--第1、2章課后題 (轉)

第一章 轉自http://www.cnblogs.com/batteryhp/p/4654860.html 思考題 1-1(運行時間的比較)確定時間t內求解的問題的最大規模。 上面是網上提供的答案。 注意點: 1、最左邊一列的是關于n的增長情況描述,值得記住的是這些增長的排…

PHP開發自己的框架必備知識點

一、PHP常用的四種數據結構 簡介&#xff1a;spl是php的一個標準庫。 官方文檔&#xff1a;http://php.net/manual/zh/book.spl.php <?php//spl&#xff08;php標準庫&#xff09;數據結構/*** 棧&#xff08;先進后出&#xff09;*/ $stack new SplStack(); $stack-&g…

Linux 環境下 jdk1.8 maven3.2.3 Git2.8.0 安裝腳本

2019獨角獸企業重金招聘Python工程師標準>>> # Author: peizhouyu # Date: 2018-09-07 14:24:11 # Last Modified by: peizhouyu # Last Modified time: 2018-09-07 16:02:58#!/bin/bash SOFT_PATH/opt/softif [ ! -d $SOFT_PATH ];then mkdir $SOFT_PATH else …

《嵌入式設備驅動開發精解》——導讀

前言 嵌入式設備驅動開發精解本書的編寫主要是針對從事嵌入式軟件開發人員。本書的內容主要涵蓋ARM CPU以及各種常用外部設備驅動開發的方方面面&#xff0c;包括各種硬件接口、硬件接口協議說明以及各種外設的使用及調試方法&#xff0c;特別是對于開發調試過程中可能遇到的各…

C# WPF通過WindowChrome自定義窗體

概述在WPF界面開發中&#xff0c;系統默認的窗口比較丑&#xff0c;有時候想自定義窗體&#xff0c;比如微信的客戶端窗口這樣&#xff1a;使得左邊的一塊頂到最上端&#xff0c;如下圖所示&#xff1a;這時候我們可以 WindowStyle"None"&#xff0c;AllowsTranspare…