第35周Zookkeeper+Dubbo Dubbo

Dubbo 詳解

一、Dubbo 是什么

官網與定義

Dubbo 是一款高性能、輕量級的開源服務框架,其官網為 double.apache.org,提供中文版本(網址含 “zh”)。

核心能力

Dubbo 具備六大核心能力:

  1. 面向接口代理的高性能 RPC 調用 :RPC(Remote Procedure Call)即遠程過程調用,允許一個服務請求另一個遠程服務的能力,是 Dubbo 的核心。Dubbo 通過高性能 RPC 調用,實現服務間通信,通信協議可指定,默認用 Dubbo 協議,而非 HTTP。
  2. 智能容錯和負載均衡 :針對調用而言,保障系統穩定性和高可用性。
  3. 服務自動注冊與發現 :簡化服務管理,方便服務提供方和消費方動態發現和調用服務。
  4. 高度可擴展能力 :滿足不同業務場景需求。
  5. 運行流量調度 :優化服務調用過程中的流量分配。
  6. 可視化的服務治理與運維 :提升運維效率和管理水平。

這些能力均圍繞 RPC 調用進行擴展或輔助,因此 Dubbo 的核心在于服務間的 RPC 調用,在多服務場景下,服務相互調用可考慮使用 Dubbo。

發展情況

Dubbo 最初由阿里巴巴內部開發,后捐贈給 Apache,期間經歷維護中斷,一些公司基于其自行維護衍生品,如當當的 Dubbo X。如今,Dubbo 支持多種語言,應用廣泛,涵蓋互聯網公司(考拉、去哪兒等)和非互聯網公司(中國電信、中國人壽等)。

二、RPC 介紹

概念及發展歷程

RPC(遠程過程調用)是服務間通信的一種方式。早期程序主要是內部方法調用,隨著發展,出現同一臺電腦內多個進程間調用需求,即進程間通信。進一步地,當需要調用的能力不在同一臺電腦內時,便引入了 RPC(Remote Procedure Call)的概念。RPC 框架能方便實現遠程調用,如 Dubbo,使得其他計算機或程序提供的服務被本地程序利用,加強系統間協作。

常見框架及對比

常見的 RPC 框架有:

  • 阿里 Dubbo 框架 :性能好,目前較為主流。
  • 新浪魔毯框架 :架構簡單,適合初學者學習原理及源碼,或作為開發小型 RPC 框架的參考。
  • Facebook Thrift 框架 :可伸縮跨語言框架,有強大代碼生成引擎,支持多種語言,適用于跨語言通信場景。

選擇框架需根據業務需求權衡,如團隊技術棧統一且對性能要求高,可選 Dubbo;若需跨語言通信,Thrift 是不錯選擇;技術棧不統一時,HTTP 可能更合適。

HTTP 和 RPC 對比

對比 Dubbo 通信協議與 HTTP 協議:

  • 傳輸效率 :RPC 通常更高,因其協議無過多無用報文內容,無需轉 json。
  • 通用性 :HTTP 更強,幾乎被所有公司默認支持,聯調首選;RPC 框架間兼容性差。
  • 負載均衡 :RPC 框架自帶負載均衡策略,HTTP 需額外處理。

開發選擇建議依據團隊技術棧、語言需求及性能要求等因素綜合考量。

三、Dubbo 工作原理

模塊信息及架構

Dubbo 架構涉及以下模塊:

  • provider :服務提供方,如商品服務提供查詢商品詳情能力。
  • consumer :服務消費方,調用遠程服務獲取所需能力。
  • registry :注冊中心,用于服務注冊與發現。
  • monitor :監控中心,監控調用次數、時間等數據。
  • container :服務運行時容器。

工作流程如下:

  1. 啟動 container,provider 在其中運行并向注冊中心注冊。
  2. consumer 訂閱服務信息,注冊中心將地址提供給 consumer。
  3. consumer 獲取信息后,直接調用對應 provider。
  4. consumer 和 provider 定期向 monitor 上報數據。

圖中紫色虛線表示初始化過程,藍色線(實線為同步調用,虛線為異步操作如通知和數據上報)表示其他操作。

四、項目開發流程

項目創建與配置

  1. 引入依賴 :在項目中引入 Dubbo 相關依賴,添加 Dubbo 特有的 @Service 注解。
  2. 指定注冊中心 :整合 Dubbo 時,通常選 Zookeeper 作為注冊中心,配置其地址以便 Dubbo 找到服務。
  3. 項目結構 :采用 spring cloud 課程結構,包含服務提供者(如課程列表)和服務調用者(如課程價格服務)兩個模塊,相互配合完成項目。

生產者開發

  1. 創建模塊 :在 Idea 中新建 Maven 項目,刪除原有 src 模塊,新建子模塊(如 producer),建立依賴關系。
  2. 編寫代碼 :在 producer 中創建包(如 com.imook.producer),包含 service 包定義接口(如 CourseListService)和實現類(如 CourseListServiceImpl),實現具體業務邏輯,如從數據庫獲取課程并展示。編寫實體類(如 Course),繼承 Serializable 接口,包含主鍵 ID、課程 ID、名稱、是否上架等字段,引入 List 列表和 JAVA Util 工具類。
  3. 配置文件 :在 resources 新建 application.properties 配置文件,配置服務版本號、通信協議、端口號、注冊地址等信息,指定 Dubbo 服務位置(如通過 dubbo.scan.base-packages)。

消費者開發

  1. 配置依賴 :消費者依賴配置與生產者基本一致,可復制生產者依賴配置并修改名稱。
  2. 配置文件 :復制生產者配置文件,修改端口號(如 8084)和項目名稱(如 course price)。
  3. 編寫業務邏輯 :新建包(如 com.imook.consumer),復制 entity 和 dao 包,新建 service 包定義接口(如課程價格服務接口,含通過 ID 查找價格、獲取課程列表并匹配價格等方法)及實現類(如 CoursePriceServiceImpl),在實現類中通過 @Reference 注解引入 Dubbo 服務,實現具體邏輯,如調用 Mapper 查詢價格、獲取課程列表并遍歷匹配價格等。
  4. 控制器與啟動類 :創建控制器,引入 service,實現具體功能如獲取課程價格、課程名稱和價格列表等。構建 Spring Boot 啟動類,更換注解為 @SpringBootApplication 以對外暴露服務,并確保正確配置 Dubbo 相關內容。

注意事項

  1. ZooKeeper 啟動 :消費者啟動前必須確保 ZooKeeper 已啟動,否則消費者找不到依賴服務會報錯。
  2. 啟動順序 :生產者需先于消費者啟動,讓消費者能正常找到所依賴的服務,可通過配置關閉此檢查。
  3. 注解選擇 :區分 spring framework 和 Apache Dubbo 的庫,正確選擇 Dubbo 的 @Service 和 @Reference 注解,并指定版本,避免沖突。
  4. 配置細節 :生產者要正確配置協議、端口號、注冊地址等信息,實體類需考慮駝峰配置,以確保下劃線字段自動轉換。

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

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

相關文章

NX二次開發——BlockUI 彈出另一個BlockUI對話框

最近在研究,裝配體下自動導出BOM表格中需要用到BlockUI 彈出另一個BlockUI對話框。通過對網上資料進行整理總結,具體如下: 1、明確主對話框、子對話框1和子對話框2 使用BlockUI創建.cpp和.hpp文件,dlx文件內容如下所示 主對話框…

PostgreSQL 系統管理函數詳解

PostgreSQL 系統管理函數詳解 PostgreSQL 提供了一系列強大的系統管理函數,用于數據庫維護、監控和配置。這些函數可分為多個類別,以下是主要功能的詳細說明: 一、數據庫配置函數 1. 參數管理函數 -- 查看所有配置參數 SELECT name, sett…

【2025軟考高級架構師】——計算機網絡(9)

摘要 全文主要圍繞計算機網絡相關知識展開,包括域名服務器查詢方式、網絡規劃與設計的關鍵技術、雙協議棧與隧道技術、層次化網絡設計、網絡冗余設計以及高可靠和高可用性等方面,旨在為軟考高級架構師的備考提供知識參考。 1. 通信網絡架構圖 2. 通信架…

yolov8n-obb訓練rknn模型

必備: 準備一臺ubuntu22的服務器或者虛擬機(x86_64) 1、數據集標注: 1)推薦使用X-AnyLabeling標注工具 2)標注選【旋轉框】 3)可選AI標注,再手動補充,提高標注速度 …

前端-HTML+CSS+JavaScript+Vue+Ajax概述

HTML&#xff08;超文本標記語言&#xff09;常見標簽 <html><head> <title>這是標題的內容&#xff0c;顯示在瀏覽器的頭部</title></head><body><!-- 這里面的內容在瀏覽器顯示給用戶看 --><!-- h1 -> h6 : 標題從大到小 …

嵌入式軟件--stm32 DAY 5 USART串口通訊(上)

前邊我們學的都是通用的功能&#xff0c;例如GPIO、中斷&#xff0c;現在我們要學習的是某一個特定的功能。典型的就是通訊功能。其中&#xff0c;最簡單的通訊協議就是串口了。 一、串口_通訊基礎知識 1.1 串行與并行 按數據傳送的方式分類的。 串行通信一位一位傳輸&…

c++混淆工具Hikari-LLVM15-llvm-18.1.8rel編譯安裝

目錄 1. windows 編譯1. 2 編譯工具安裝1.2.1 下載w64devkit1.2.2 添加環境變量1.2.3 驗證一下 1.3 下載llvm-18.1.8rel1.4 編譯 2. Android studio增加混淆編譯2.1 替換NDK中clang2.2 配置混淆編譯項 3. Linux編譯安裝4. Linux下增加混淆編譯4.1 在CMakeLists.txt中設置clang編…

【EasyPan】loadDataList方法及checkRootFilePid方法解析

【EasyPan】項目常見問題解答&#xff08;自用&持續更新中…&#xff09;匯總版 一、loadDataList方法概覽 /*** 文件列表加載接口* param session HTTP會話對象* param shareId 必須參數&#xff0c;分享ID&#xff08;使用VerifyParam進行非空校驗&#xff09;* param …

Vue3渲染引擎:虛擬DOM與響應式原理

Vue3渲染引擎&#xff1a;虛擬DOM與響應式原理 在當今的前端開發中&#xff0c;Vue.js作為一種流行的JavaScript框架&#xff0c;經常被用來構建用戶界面。而Vue.js 3作為其最新版本&#xff0c;在性能和功能上進行了許多優化和改進。其中&#xff0c;Vue3渲染引擎的核心原理—…

【論文閱讀】Attentive Collaborative Filtering:

Attentive Collaborative Filtering: Multimedia Recommendation with Item- and Component-Level Attention Attentive Collaborative Filtering (ACF)、隱式反饋推薦、注意力機制、貝葉斯個性化排序 標題翻譯&#xff1a;注意力協同過濾&#xff1a;基于項目和組件級注意力的…

【PostgreSQL數據分析實戰:從數據清洗到可視化全流程】2.1 數據查詢基礎(SELECT/WHERE/GROUP BY/HAVING)

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 第2章 SQL語法進階:數據查詢基礎(SELECT/WHERE/GROUP BY/HAVING)2.1 數據查詢基礎2.1.1 SELECT 語句:從表中提取數據2.1.1.1 基礎語法與列選擇2.1.1.2 列別名與表達式2.1.1.3 去重與排序2.1.2 WHERE…

深度解析:基于Python的微信小程序自動化操作實現

引言 在當今數字化時代&#xff0c;自動化技術正在改變我們與軟件交互的方式。本文將深入解析一個使用Python實現的微信小程序自動化操作腳本&#xff0c;該腳本能夠自動識別屏幕上的特定圖像并執行點擊操作。這種技術在自動化測試、批量操作和效率工具開發中有著廣泛的應用前…

layui下拉框輸入關鍵字才出數據

html里這樣放 <div class"layui-form-item"><label class"layui-form-label">合同方&#xff1a;</label><div class"layui-input-block rightinline"><input type"text" name"select_text" ids…

bash和zsh的區別

Bash&#xff08;Bourne-Again SHell&#xff09;和 Zsh&#xff08;Z Shell&#xff09;都是 Unix/Linux 系統中的主流 Shell&#xff0c;但它們在功能、配置和用戶體驗上有顯著區別。以下是兩者的詳細對比&#xff1a; 1. 歷史與兼容性 特性BashZsh誕生時間1989 年&#xff…

組件通信-v-model

概述&#xff1a;實現 父?子 之間相互通信。 前序知識 —— v-model的本質 <!-- 使用v-model指令 --> <input type"text" v-model"userName"><!-- v-model的本質是下面這行代碼 --> <input type"text" :value"use…

虛擬機(Virtual Machine, VM)的簡單介紹

目錄 一、虛擬機的基本概念 二、虛擬化技術的分類 三、虛擬機的核心架構 四、虛擬機的核心應用場景 五、虛擬機的優缺點分析 六、虛擬機與容器技術的對比 七、虛擬機的未來趨勢 八、總結 一、虛擬機的基本概念 虛擬機&#xff08;VM&#xff09;是一種通過軟件模擬的完…

Xcode16提交App Store審核時提示bitcode報錯

提交AppStore時出現bitcode報錯&#xff0c;內容如下&#xff1a; Upload was cancelled. 2025-04-30 02:15:48.349 [ContentDelivery.Uploader.600000DB4380] Show Progress: Upload failed. Validation failed Invalid Executable. The executable Blockolot.app/Frameworks/…

Flutter TabBar / TabBarView 詳解

目錄 一、引言 二、基本用法 代碼解析 三、主要屬性 3.1 TabBar 3.2 TabBarView 四、進階定制&#xff1a;突破默認樣式 4.1 視覺樣式深度定制 4.2 自定義指示器與標簽 4.3 動態標簽管理 五、工程實踐關鍵技巧 5.1 性能優化方案 5.2 復雜手勢處理 5.3 響應式布局…

mathtype轉化

mathtype轉latex 點擊預置 選擇剪切和復制預置 點擊MathML 或 TeX&#xff0c;選擇 LaTeX 2.09 and later mathtype轉word自帶編碼器 與前面都相同&#xff0c;選擇 MathML2.0&#xff08;m namespace&#xff09;

AI檢測的荒謬性:當規則淪為一場概率游戲

當今高校對AI檢測工具的依賴&#xff0c;已經演變成一場標準混亂的鬧劇。有的學校指定格子達&#xff0c;有的迷信維普&#xff0c;而同一篇論文在不同的系統里竟能得出天差地別的結果——在格子達AI檢測率僅12%的文章&#xff0c;放到維普卻可能飆升到60%。這意味著&#xff0…