Dubbo入門直接上手,結合微服務詳解

Dubbo

高性能、輕量級的 Java RPC 框架

RPC: Remote Procedure Call 遠程過程調用,簡單來說就是它允許一個計算機程序通過網絡請求調用另一個計算機上的程序,就像本地調用一樣。有非常多的協議和技術來都實現了RPC的過程,比如:HTTP REST風格,Java RMI規范、WebService SOAP協議、Hession等等。

Dubbo架構

在這里插入圖片描述

節點角色說明:

?Provider:暴露服務的服務提供者 (就是你每個大功能類單獨一個模塊)

?Container:服務運行容器

?Consumer:調用遠程服務的服務消費者 (這里一般是web或者網關gateway)

?Registry:服務注冊與發現的注冊中心

?Monitor:統計服務的調用次數和調用時間的監控中心

調用流程:
  1. 服務容器負責啟動,加載,運行服務提供者。
  2. 服務提供者在啟動時,向注冊中心注冊自己提供的服務。(你可以在自己的注冊中心中,看到對應的配置)
  3. 服務消費者在啟動時,向注冊中心訂閱自己所需的服務
  4. 注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數據給消費者。
  5. 服務消費者,從提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。
  6. 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

Dubbo實用

你需要有服務提供者模塊和服務消費者模塊

1.首先需要一個可用的注冊中心 Zookeeper,Nacos,Redis 均可。(這里使用Nacos)

2.新建一個maven工程,添加如下依賴

		<!-- registry dependency --><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>${nacos.version}</version></dependency><!-- dubbo dependency--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency>

3.你需要給服務提供者模塊和服務消費者模塊提供對應的配置,這樣才能實現去注冊中心注冊和調用服務。對應著每個模塊來設置,不過記得注冊中心地址要填同一個;要不然怎么去找服務。

# 提供者
dubbo:application:name: providerprotocol:name: dubboport: -1# 注冊中心  registry:address: nacos://your.nacos.address:8848username: nacospassword: nacos

其實,可以這樣理解:

  • 網關 = 服務消費者
  • 其他的功能模塊 = 服務提供者

消費者調用提供者的服務,比如登錄功能:

網關(消費者)寫一個登錄接口,然后使用 @DubboReference 就可以實現遠程注入,即可像調用本地方法一樣調用遠程服務了。代替以前的@autowired

@DubboReference(interfaceClass = UserService.class)private UserService userService;

登錄模塊UserCenter(提供者)寫一個UserServiceImpl類,來進行登陸的邏輯代碼編寫。實現類可以通過@DubboService(interfaceClass = UserService.class) :使用@DubboService 注解,Dubbo會將對應的服務注冊到spring, 在spring啟動后調用對應的服務導出方法,將服務注冊到注冊中心, 這樣Consumer端才能發現我們發布的服務并調用。其實也就等同于以前的@Service

@DubboService(interfaceClass = UserService.class)
public class UserServiceImpl implements UserService { 
}

? 而因為會有很多個功能模塊,這樣子大家可能也注意到了一個問題。就是需要在兩個模塊都寫一個service接口類,這樣子的話,以后假如進行功能的添加或者修改啥的,兩邊都需要進行更改;很多時候不一定能統一,畢竟以后出去工作可能是一個團隊一個模塊。所以這個時候,我們可以添加一個公共的模塊,專門用來存放服務接口的。

這里通過Maven導入即可:在消費者和提供者的POM中都導入公共模塊;這樣就可以解決這個問題了。

與之類似的還有一個是Java對象的傳輸,定義一個公共的對象模塊;然后讓提供者和消費者都去導入其模塊即可。當然這個可以利用到Maven的傳遞性;你讓公共服務模塊導入公共對象模塊,這樣就可以無縫銜接了。不過對象的傳輸需要多注意一點,對象需要實現序列化接口 implements Serializable。dubbo 內部已經將序列化和反序列化的過程內部封裝了。

這樣的模塊還有很多,工具模塊也是;這些看你怎么搭建底層了。

這里提醒一下:

記得啟動模塊的時候,先啟動提供者(提供者無先后順序要求),最后在啟動消費者。畢竟服務提供者在啟動時,要向注冊中心注冊自己提供的服務。服務消費者在啟動時,向注冊中心訂閱自己所需的服務。然后是會有緩存機制的,就是它會將提供者的服務緩存在消費者的本地;所以你也可以不用每次都運行提供者。但是代碼改動時,就需要啟動,再次進行注冊。

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

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

相關文章

Elasticsearch 8.9 refresh刷Es緩沖區的數據到Lucene,更新segemnt,使數據可見

一、相關API的handler1、接受HTTP請求的hander(RestRefreshAction)2、往數據節點發送刷新請求的action(TransportRefreshAction)3、數據節點接收主節點refresh傳輸的action(TransportShardRefreshAction) 二、在IndexShard執行refresh操作1、根據入參決定是使用lucene提供的阻塞…

【華為數據之道學習筆記】3-8以確保合規遵從為核心的外部數據管理

一、以確保合規遵從為核心的外部數據管理 外部數據是指華為公司引入的外部組織或者個人擁有處置權利的 數據&#xff0c;如供應商資質證明、消費者洞察報告等。外部數據治理的出發點是合規遵從優先&#xff0c;與內部數據治理的目的不同。 外部數據的治理主要遵循以下原則。 1&…

【設計模式--創建型--原型模式】

設計模式--創建型--原型模式 原型模式概述結構實現結果 案例代碼結果使用場景 擴展&#xff08;深\淺克隆&#xff09;淺克隆演示&#xff1a;結果&#xff1a;使用深克隆&#xff08;利用對象流&#xff09;結果 原型模式 概述 用一個已經創建的實例作為原型&#xff0c;通過…

Go簡單了解

0.一直很好奇,go是不是像傳說中的速度快,解決了多線程問題,快速進行了解了解,和java進行對比,他是怎么解決語言發展的問題的…,所有語言都是差不多的,只是熟練程度不同而已 1.go圖標是土撥鼠,2009發行 docker使用go,解決了并發問題 google facebook 騰訊 百度 七牛云 京東 小米…

Spring Cloud Gateway + Nacos + LoadBalancer實現企業級網關

1. Spring Cloud Gateway 整合Nacos、LoadBalancer 實現企業級網關 前置工作&#xff1a; 創建 SpringBoot 多模塊項目創建網關&#xff08;gateway-service&#xff09;、用戶&#xff08;user-service&#xff09;模塊用戶模塊添加 Nacos discovery 支持以及 Spring Web&am…

gitbash下載安裝

參考教程 零、下載 官網地址 2.43.0win64 鏈接&#xff1a;https://pan.baidu.com/s/16urs_nmky7j20-qNzUTTkg 提取碼&#xff1a;7jaq 一、安裝 圖標組件&#xff08;Additional icons&#xff09;&#xff1a;選擇是否創建桌面快捷方式&#xff1b;桌面瀏覽&#xff08;Win…

設計模式--命令模式的簡單例子

引入&#xff1a;以一個對數組的增刪改查為例。通過命令模式可以對數組進行增刪改查以及撤銷回滾。 一、基本概念 命令模式有多種分法&#xff0c;在本文中主要分為CommandMgr、Command、Receiver. CommandMgr主要用于控制命令執行等操作、Command為具體的命令、Receiver為命…

逸迅科技丁紅陽:三種能力幫助企業打造GBI “護城河”

大數據產業創新服務媒體 ——聚焦數據 改變商業 近日&#xff0c;由上海市經濟和信息化委員會、上海市科學技術委員會指導&#xff0c;數據猿與上海大數據聯盟聯合主辦的“2023企業數智化轉型升級發展論壇”在上海舉行。本次論壇以“釋放數字價值驅動智能升級”為主題&#xf…

piakachu越權漏洞

水平越權 首先打開這一關&#xff0c;在右側有一些提示&#xff0c;我們可以看到 然后我們隨便輸入一組信息即可&#xff0c;可以在url中看到這樣的字段 當我們嘗試在url中直接更換另一個用戶名時可以發現&#xff0c;直接切換到了另一個用戶的身份 垂直越權 這里可以看到右邊…

QML和C++交互中,實現C++中connect到qml的信號,再從qml發射信號傳遞數據給C++的一種方式

1.需求&#xff1a; 假設我們有一個需求&#xff0c;要求在用戶點擊列表中的項目時&#xff0c;不僅在控制臺上輸出項目的名稱&#xff0c;還要在C端進行一些處理。我們希望在C端能夠接收到用戶點擊的項目名稱&#xff0c;并進行相應的處理。 2.分析&#xff1a; 在這種情況…

Android 10.0 系統framework修改低電量關機值為2%

1.前言 在10.0的系統產品開發中,在系統關于低電量關機的值,每個平臺都不同,根據實際開發底層硬件的要求看實際情況來調整這個值, 所以需要分析相關的電量變化執行的代碼流程,來實現這個功能 2.系統framework修改低電量關機值為2%的核心類 frameworks\base\services\cor…

一文學會使用 PyInstaller 將 Python 腳本打包為 .exe 可執行文件

文章目錄 前言PyInstaller特點跨平臺支持自動依賴項處理單文件發布支持圖形用戶界面&#xff08;GUI&#xff09;和命令行界面&#xff08;CLI&#xff09;應用支持多種打包選項 基本用法常用參數其它參數 版本 & 環境實現步驟安裝 PyInstaller創建 Python 腳本使用 PyInst…

Strange-Towers-of-Hanoi

title: Strange Towers of Hanoi date: 2023-12-11 03:20:05 tags: 遞推 categories: 算法進階指南 題目大意 解出 n n n 個盒子 4 4 4 座塔的漢諾塔問題最少需要多少次&#xff1f; 思路 首先考慮 n n n 個盒子 3 3 3 座塔的經典漢諾塔問題&#xff0c;設 d [ n ] d[n] …

第三十章 控制到 XML 模式的映射 - Array of Classname

文章目錄 第三十章 控制到 XML 模式的映射 - Array of ClassnameArray of Classname 第三十章 控制到 XML 模式的映射 - Array of Classname Array of Classname 本部分顯示了從啟用 XML 的類生成的XML 架構的一部分&#xff0c;此時該類包含定義為類名數組的屬性。例如&…

【SpringBoot教程】SpringBoot 創建定時任務(配合數據庫動態執行)

作者簡介&#xff1a;大家好&#xff0c;我是擼代碼的羊駝&#xff0c;前阿里巴巴架構師&#xff0c;現某互聯網公司CTO 聯系v&#xff1a;sulny_ann&#xff08;17362204968&#xff09;&#xff0c;加我進群&#xff0c;大家一起學習&#xff0c;一起進步&#xff0c;一起對抗…

transformer模型結構|李宏毅機器學習21年

來源&#xff1a;https://www.bilibili.com/video/BV1Bb4y1L7FT?p4&vd_sourcef66cebc7ed6819c67fca9b4fa3785d39 文章目錄 概述seq2seqtransformerEncoderDecoderAutoregressive&#xff08;AT&#xff09;self-attention與masked-self attentionmodel如何決定輸出的長度…

【親測有效】支持橫豎屏 微信小程序video禁止進度條拖動,微信小程序遮罩進度條,

背景&#xff1a;部分課程禁止客戶拖動視頻進度條直至播放結束 紅色是遮罩區域遮罩區域 實際遮罩效果&#xff08;有一個很淺的陰影區域&#xff09; 實現代碼 .wxml文件 <video enable-progress-gesture"false" ><cover-view class"cover">…

基于深度學習的yolov7植物病蟲害識別及防治系統

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介簡介YOLOv7 系統特性工作流程 二、功能三、系統四. 總結 一項目簡介 # YOLOv7植物病蟲害識別及防治系統介紹 簡介 該系統基于深度學習技術&#xff0c;采…

Seata配置

參考教程 seata 分布式事務的環境搭建與使用 Seata 1.4.0 nacos配置和使用&#xff0c;超詳細 Seata 1.4.2 的安裝 Nacos的配置和使用 官網下載地址 本文以v1.4.1為例 1.數據庫及表的創建 創建seata數據庫&#xff0c;創建以下表&#xff08;右鍵連接-》新建數據庫seata-》…

kubeadm搭建1.20.7版本k8s

資源 服務器名稱ip地址服務master1&#xff08;2C/4G&#xff0c;cpu核心數要求大于2&#xff09;192.168.100.10docker、kubeadm、kubelet、kubectl、flannelnode01&#xff08;2C/2G&#xff09;192.168.100.30docker、kubeadm、kubelet、kubectl、flannelnode02&#xff08…