Dubbo3使用Zookeeper作為注冊中心的方案討論!詳解DubboAdmin與PrettyZoo來監控服務的優劣!

文章目錄

一:Dubbo注冊中心的基本使用

二:Zookeeper注冊中心的使用

1:依賴引入

2:實際開發

三:Zookeeper作為注冊中心的使用展示

1:啟動注冊Zookeeper服務

2:引入注冊中心

(一):Provider

(二):Consumer

3:啟動服務結果展示

4:監控服務的兩種手段


一:Dubbo注冊中心的基本使用

? ? ? ? 我們使用的和分析講解的Dubbo版本是Dubbo3,作為Dubbo來講Dubbo支持的注冊中心有很多Zookeeper、Nacos、Consule等等。這是三種比較常見的注冊中心當然我指的是在Dubbo當中,另外不太常見的還有Etced這樣的注冊中心。我們在進行Dubbo注冊中心講解的時候,會把這個三個著重挑選出來作為重點講解對象,這個原因是非常簡單的。

? ? ? ? 首先我們在前面的Rpc專欄的時候,Zookeeper我們已經分析過了,而另外的Nacos在微服務當中有著舉足輕重的地位!他也是阿里的DNS這種解決方案當中N的這個元素,他在阿里的體系技術中有著很高的作用。對于Consul來講,在云原生環境下這個Consul是非常適用于云原生環境的技術棧,所以適應新的潮流我們不得不對Consul進行分析和講解。Etced相對來講使用要少一點,我們暫時不對他進行相應的講解。

二:Zookeeper注冊中心的使用

? ? ? ? 應用Zookeeper作為注冊中心,首先我們要對引入對應的依賴。這個依賴實際上包含的是兩個部分的內容。第一個依賴是Zookeeper的Java客戶端,客戶端是Java應用與Zookeeper進行通信交互的基礎,我們當前使用的是3.8.1這個版本,第二個依賴是對Zookeeper的Java客戶端的高級封裝curator,在這里我們選擇的是curator5這個版本。實際上作為Zookeeper客戶端和curator版本的使用,Dubbo已經在他的官網上給我們羅列出來了:

Zookeeper Server版本Dubbo版本Dubbo Zookeeper依賴包說明
3.4.x及以下3.0.x及以上dubbo-dependencies-zookeeper傳遞依賴Curator4.x、Zookeeper 3.4.x
3.5.x及以上3.0.x及以上dubbo-dependencies-zookeeper-curator5傳遞依賴Curator5.x、Zookeeper 3.7.x
3.4.x及以上2.7.x及以下dubbo-dependencies-zookeeper傳遞依賴Curator4.x、Zookeeper 3.4.x
3.5.x及以上2.7.x及以下需要手動添加Curator、Zookeeper等相關客戶端依賴

? ? ? ? 這里邊涉及到的版本有Dubbo的版本和Zookeeper的版本和他們對應的依賴包的說明,當前咱們的Dubbo選擇的是3.2.0且Zookeeper的版本選擇是的3.6這個版本,按照這個關系我們應該從第二行的表格中的設置方式去挑選。?所以應該選擇dubbo-dependencies-zookeeper-curator5這個依賴包。

1:依賴引入

? ? ? ? 基于上邊的依賴關系,我們挑選如下的版本來設置我們的Zookeeper客戶端版本。

  <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper-curator5</artifactId><version>${dubbo.version}</version><type>pom</type><exclusions><exclusion><artifactId>zookeeper</artifactId><groupId>org.apache.zookeeper</groupId></exclusion></exclusions></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.8.1</version></dependency>

2:實際開發

? ? ? ? 接下來我們就需要進行相應的開發了。接下來的開發反而比較簡單了,首先我們的依賴已經引入進來了。我們只需要在provider和consumer當中進行一個配置即可,其中一個非常指的注意的是,不論我們選擇使用什么注冊中心或者Zookeeper或者Nacos也好,只要在Dubbo的體系下使用注冊中心,那么這個配置必須在我們的Provider和Consumer下面都進行注冊!

? ? ? ? 如果我們還引入了DubboAdmin的話,我們也得在DubboAdmin當中對注冊中心進行相應的配置。并且呢Provider對注冊中心的配置和Consumer對注冊中心的配置以及DubboAdmin對注冊中心的配置要保持一致!所以,我們的配置流程就是在Consumer和Provider的配置文件中去配置一個dubbo.registry.address即可:

dubbo:registry:address:zookeeper://127.0.0.1:2181

? ? ? ? 注冊中心的地址里面如果我們選擇的是Zookeeper作為注冊中心,那么需要使用Zookeeper協議。Zookeeper://這樣就代表了Zookeeper的協議,如果后續我們選擇Nacos的話,只需要使用:

dubbo:registry:address:nacos://127.0.0.1:2181

? ? ? ? 值得注意的是,協議后邊的ip地址就是我們的注冊中心服務對應的主機ip地址。我們當前是本地安裝那么就是127.0.0.1。當前的端口是注冊中心的監聽端口,Zookeeper的默認端口是2181,Nacos的默認端口是8848,Consul的默認端口是8500?,通過這樣的一種方式,我們就在我們的整個服務中引入了Zookeeper作為我們的注冊中心了。

三:Zookeeper作為注冊中心的使用展示

1:啟動注冊Zookeeper服務

啟動命令:bin/zkServer.cmd

啟動結果:

使用我們的PrettyZoo可視化工具可以看到Zookeeper的服務內容。?當前我們可以清楚的看到在我們的根節點下只有我們一個zookeeper的節點,這是非常正常和干凈的。接下來我們啟動我們的服務來進行測試。

????????? ? ?

2:引入注冊中心

(一):Provider

spring:application:name: DUBBO-02-REGISTER-PROVIDERdubbo:application:qos-enable: falseregister-mode: interfaceprotocol:name: dubboport: -1registry:address: zookeeper://127.0.0.1:2181

(二):Consumer

spring:application:name: DUBBO-03-REGISTER-CONSUMERdubbo:application:qos-enable: falseregistry:address: zookeeper://127.0.0.1:2181

3:啟動服務結果展示

? ? ? ? 首先我們直接啟動提供者,然后在啟動我們的消費者。

消費者:

@SpringBootTest
public class TestDubbo {@DubboReferenceprivate UserService userService;@Testvoid test1() throws IOException {String xiaohei = userService.login("xiaohei", "11111");System.out.println("xiaohei = " + xiaohei);System.in.read();}
}

? ? ? ? 啟動之后,服務向我們的注冊中心發起注冊,PrettyZoo界面發生變化:

? ? ? ? 消費者是基于測試啟動的一個服務,然后UserService代理對象已經基于DubboReference注解注入了進來,我們加入一個阻塞方便查看結果,首先是我們的消費端的結果展示:

2023-11-23 22:51:04.008  INFO 4272 --- [           main] o.a.d.r.c.m.MigrationRuleHandler         :  [DUBBO] Succeed Migrated to APPLICATION_FIRST mode. Service Name: com.suns.service.UserService, dubbo version: 3.2.0, current host: 192.168.8.1
2023-11-23 22:51:04.008  INFO 4272 --- [           main] org.apache.dubbo.config.ReferenceConfig  :  [DUBBO] Referred dubbo service: [com.suns.service.UserService]. it's not GenericService reference, dubbo version: 3.2.0, current host: 192.168.8.1
2023-11-23 22:51:04.011  INFO 4272 --- [Report-thread-1] o.a.d.m.s.z.ZookeeperMetadataReport      :  [DUBBO] store consumer metadata. Identifier : org.apache.dubbo.metadata.report.identifier.MetadataIdentifier@440c2c9d; definition: org.apache.dubbo.common.url.component.URLParam$URLParamMap@58ea4a38, dubbo version: 3.2.0, current host: 192.168.8.1
xiaohei = this is login

? ? ? ? 提供者基于SpringBoot入口類進行服務啟動,服務啟動完畢之后等待消費者的調用,接下來是我們消費者的調用結果:

2023-11-23 22:48:38.704  INFO 612 --- [pool-1-thread-1] .b.c.e.AwaitingNonWebApplicationListener :  [Dubbo] Current Spring Boot Application is await...
2023-11-23 22:51:03.960  INFO 612 --- [erverWorker-3-1] o.a.d.r.t.netty4.NettyServerHandler      :  [DUBBO] The connection of /192.168.8.1:55886 -> /192.168.8.1:20880 is established., dubbo version: 3.2.0, current host: 192.168.8.1
2023-11-23 22:51:04.123  INFO 612 --- [erverWorker-3-1] o.a.dubbo.rpc.protocol.dubbo.DubboCodec  :  [DUBBO] Because thread pool isolation is enabled on the dubbo protocol, the body can only be decoded on the io thread, and the parameter[decode.in.io.thread] will be ignored, dubbo version: 3.2.0, current host: 192.168.8.1
UserServiceImpl.login name is xiaohei password is 11111

? ? ? ? 從結果上來看,我們從消費端出入的參數在服務提供端控制臺正確的被打印了出來,說明我們的消費者和提供者之間的Rpc調用成功進行,也證明了基于此次Zookeeper作為我們的注冊中心完成消費者和提供者之間的通信是成功的!

4:監控服務的兩種手段

? ? ? ? 當然我們剛才監控注冊中心的方式是基于PrettyZoo的形式來檢測我們的注冊中心,那么還有沒有其他的方式來監控我們的注冊中心中的內容呢?當時是有的,這個手段就是基于DubboAdmin當我們啟動完畢DubboAdmin之后,可能會遇到這樣的一個問題導致啟動失敗。這個異常就是端口地址綁定失敗,這個是因為我們的DubboAdmin啟動的時候會模擬一個Dubbo服務出來往我們的注冊中心發起注冊,現在報錯是因為我們的我們剛才啟動的提供者的服務已經把我們的本地20880端口給占用了,這個時候DubboAdmin在基于這個端口啟動就啟動不起來了,我們需要先啟動我們的DubboAdmin,然后在啟動我們的Provider和Consumer即可,因為按照道理來講也應該先啟動我們的監控平臺,在啟動我們的Dubbo服務。

? ? ? ? 瀏覽器中輸入Localhost:9000就可以查看我們的DubboAdmin監控平臺。上來之后,我們可發發現DubboAdmin中只有我們的MockService。這個時候重新啟動我們的提供者和消費者即可。這個時候,我們可以在DubboAdmin中看到我們的Dubbo服務了。

? ? ? ? 這件事情告訴我們如何監控我們的服務,第一種方式就是基于我們的注冊中心,如果是Zookeeper作為注冊中心的話,我們可以使用PrettyZoo作為可視化工具進行檢測即可。第二種方式就是使用DubboAdmin也可以完成對Dubbo服務的監控!

? ? ? ? 后續,我們強烈建議使用DubboAdmin來監控我們的服務,首先就是DubboAdmin不僅僅可以可以監測到具體的服務,另外還可以對服務進行測試、服務的統計等等功能。所以后續我們的Pretty可以少用,盡量多用我們的DubboAdmin。

? ? ? ? 為什么我們切換啟動順序之后,后續的Provider的端口就不再是20880了呢?當前我們的提供者基于Dubbo協議,他的端口號我們設置的是-1,這個負一的特點就是如果服務啟動的時候如果默認端口號20880被占用的話,就會在原有的基礎上進行+1,這樣我們的DubboAdmin中的MockService和提供者服務就都能正常啟動了。值得注意的是DubboAdmin啟動的時候,是沒有端口號+1的這個功能的。

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

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

相關文章

Java 21增強對Emoji表情符號的處理了

現一個 Java 21 中有意思的東西&#xff01; 在java.Lang.Character類中增加了用于確定字符是否為 Emoji 表情符號的 API&#xff0c;主要包含下面六個新的靜態方法&#xff1a; public static boolean isEmoji(int codePoint) {return CharacterData.of(codePoint).isEmoji(…

操作系統 day13(RR、優先級調度)

RR&#xff08;時間片輪轉&#xff09; 響應時間&#xff1a;系統中有10個進程正在并發執行&#xff0c;如果時間片為1秒&#xff0c;則一個進程被響應可能需要等待9秒。也就是說&#xff0c;如果用戶在自己進程的時間片外通過鍵盤發出調試命令&#xff0c;可能需要等待9秒才能…

中斷方式的數據接收

中斷接收簡介 回顧之前的代碼 之前的代碼是 等待標志位RXNE位為1才有數據 進而讀取數據存放在變量c中 再根據c變量的數據是為0還是為1進而編寫燈亮滅的代碼 if語句 但這樣的代碼明顯不符合裸機多任務的編程模型 因為在while中為進程 進程執行的時間不能大于5ms 但是while&…

Qt/QML編程學習之心得:一個Qt工程的學習筆記(九)

1、.pro文件 加CONFIG += c++11,才可以使用Lamda表達式(一般用于connect的內嵌槽函數) 2、QWidget 這是Qt新增加的一個類,基類,窗口類,QMainWindow和QDialog都繼承與它。 3、Main函數 QApplication a應用程序對象,有且僅有一個 a.exec() 進行消息循環、阻塞 MyWi…

《圖解Java數據結構與算法:微課視頻版》簡介

本書系統、全面地介紹數據結構的基礎理論與算法設計&#xff0c;精選數據結構考研習題和各類典型例題進行講解&#xff0c;案例和課后習題豐富&#xff0c;突出對數據結構算法實踐能力的培養。本書算法均采用Java語言實現&#xff0c;示例代碼可直接上機運行。 本書配套資源豐…

Spring-jdbcTemplate-配置數據庫連接池,配置文件方式beans.xml

1、jdbc.properties jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql:///studb jdbc.userroot jdbc.pwd123456 2、beans.xml <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans&…

Python BDD 框架比較之 pytest-bdd vs behave

pytest-bdd和behave是 Python 的兩個流行的 BDD 測試框架&#xff0c;兩者都可以用來編寫用戶故事和可執行的測試用例&#xff0c; 具體選擇哪一個則需要根據實際的項目狀況來看。 先簡單看一下兩者的功能&#xff1a; pytest-bdd 基于pytest測試框架&#xff0c;可以與pytest…

港口大型設備狀態監測及預測性維護策略

在現代港口運營中&#xff0c;大型設備的正常運行對于保障港口作業的高效性至關重要。為了實現設備的可靠性和持續性&#xff0c;港口管理者需要采取一系列狀態監測和預測性維護策略。 推進自動化和智能化是提高港口大型設備狀態監測和維護管理效率的重要途徑。通過應用先進的…

【計算機網絡筆記】數據鏈路層概述

系列文章目錄 什么是計算機網絡&#xff1f; 什么是網絡協議&#xff1f; 計算機網絡的結構 數據交換之電路交換 數據交換之報文交換和分組交換 分組交換 vs 電路交換 計算機網絡性能&#xff08;1&#xff09;——速率、帶寬、延遲 計算機網絡性能&#xff08;2&#xff09;…

讀像火箭科學家一樣思考筆記07_探月思維

1. 挑戰“不可能”的科學與企業 1.1. 互聯網 1.1.1. 和電網一樣具有革命性&#xff0c;一旦你插上電源&#xff0c;就能讓自己的生活充滿活力 1.1.2. 互聯網的接入可以幫助人們擺脫貧困&#xff0c;拯救生命 1.1.3. 互聯網還可以提供與天氣相關的信息 1.2. 用廉價、可靠的…

Windows如何截取屏幕圖片以及動態圖

在制作PPT或是其他演示文稿或是說明文檔的時候&#xff0c; 常常需要截取網頁或是屏幕的截圖&#xff0c;在Windows中有多種方式可以實現截取屏幕。 Windows 截取屏幕圖片的方式 在Windows 中截取屏幕中某個區塊的方式有&#xff1a; 方式1. 最原始的方式&#xff1a; 點擊 …

C練習題_2

一、單項選擇題(本大題共20小題,每小題2分,共40分。在每小題給出的四個備選項中選出一個正確的答案&#xff0c;并將所選項前的字母填寫在答題紙的相應位置上。&#xff09; 以下敘述中錯誤的是&#xff08;) A.對于double類型數組&#xff0c;不可以直接用數組名對數組進行整…

機器學習與藥物篩選的心得體會

機器學習在藥物設計里面的應用可以說還是比較常見的&#xff0c;尤其是搞計算的都會或多或少的涉及到這塊。比如國內做這塊比較多的&#xff0c;浙江大學的侯廷軍教授&#xff0c;北京化工大學的閆愛霞教授&#xff0c;華東理工大學的幾個做模擬計算的老師&#xff0c;上海藥物…

Unity機器學習 ML-Agents第一個例子

上一節我們安裝了機器學習mlagents的開發環境&#xff0c;本節我們創建第一個例子&#xff0c;了解什么是機器學習。 我們的例子很簡單&#xff0c;就是讓機器人自主移動到目標位置&#xff0c;不能移動到地板范圍外。 首先我們來簡單的了解以下機器學習的過程。 機器學習的過…

分布式鎖之基于zookeeper實現分布式鎖(三)

3. 基于zookeeper實現分布式鎖 實現分布式鎖目前有三種流行方案&#xff0c;分別為基于數據庫、Redis、Zookeeper的方案。這里主要介紹基于zk怎么實現分布式鎖。在實現分布式鎖之前&#xff0c;先回顧zookeeper的相關知識點 3.1. 知識點回顧 3.1.1. 安裝啟動 安裝&#xff1a…

『亞馬遜云科技產品測評』活動征文|搭建圖床chevereto

『亞馬遜云科技產品測評』活動征文&#xff5c;搭建圖床chevereto 提示&#xff1a;本篇文章授權活動官方亞馬遜云科技文章轉發、改寫權&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒體平臺&#xff0c;第三方開發者媒體等亞馬遜云科技官方渠道 文章目錄 『…

Python 獲取本地和廣域網 IP

Python 獲取本地IP &#xff0c;使用第三方庫&#xff0c;比如 netifaces import netifaces as nidef get_ip_address():try:# 獲取默認網絡接口&#xff08;通常是 eth0 或 en0&#xff09;default_interface ni.gateways()[default][ni.AF_INET][1]# 獲取指定網絡接口的IP地…

字符串相加

題意&#xff1a; 給定兩個字符串形式的非負整數 num1 和num2 &#xff0c;計算它們的和并同樣以字符串形式返回。 你不能使用任何內建的用于處理大整數的庫&#xff08;比如 BigInteger&#xff09;&#xff0c; 也不能直接將輸入的字符串轉換為整數形式。 示例 1&#xff…

利用STM32CubeMX解讀時鐘樹

1&#xff0c;低速時鐘 LSE是外部晶振作時鐘源&#xff0c;主要提供給實時時鐘模塊&#xff0c;所以一般采用32.768KHz。LSI是由內部RC振蕩器產生&#xff0c;也主要提供給實時時鐘模塊&#xff0c;頻率大約為40KHz。(LSE和LSI)只是提供給芯片中的RTC(實時時鐘)及IWDG(獨立看門…

【c++】棧教程

今天來講講棧 棧是什么&#xff1f; 老樣子&#xff0c;先來看一道題&#xff1a; 【棧】棧的基本操作 描述 棧的定義&#xff1a;棧是一種特殊的表這種表只在表頭進行插入和刪除操作。因此&#xff0c;表頭對于棧來說具有特殊的意義&#xff0c;稱為棧頂。相應地&#xff0…