Dubbo基礎理解

      網友投稿 768 2022-05-29

      Dubbo原理

      什么是RPC

      Dubbo框架

      基本使用

      基本底層原理

      什么是RPC

      Dubbo基礎理解

      維基百科定義:

      遠程過程調用(英語:Remote Procedure Call,縮寫為 RPC)是一個計算機通信協議。該協議允許運行于一臺計算機的程序調用另一個地址空間(通常為一個開放網絡的一臺計算機)的子程序,而程序員就像調用本地程序一樣,無需額外地為這個交互作用編程(無需關注細節)。RPC是一種服務器-客戶端(Client/Server)模式,經典實現是一個通過發送請求-接受回應進行信息交互的系統。如果涉及的軟件采用面向對象編程,那么遠程過程調用亦可稱作遠程調用或遠程方法調用。

      RPC協議:只是定義數據傳輸格式和傳輸方式,是一種應用層協議。

      傳輸方式:有基于HTTP傳輸數據的RPC Over HTTP,也有基于TCP的RPC Over TCP等。

      數據格式:雙方協商定義,一般包括以下幾點:

      1、類名

      2、方法名

      3、參數類型(用來確定具體執行的方法,有方法重載)

      4、參數值

      Dubbo框架

      dubbo是一種高性能、輕量級的開源Java RPC框架(最新官網稱為服務框架),支持多種協議,默認使用dubbo協議,也可以使用HTTP協議等。

      使用dubbo協議時,傳輸方式使用Netty;

      使用HTTP協議時,傳輸方式使用Tomcat;

      基本使用

      Dubbo實現主要包括:服務提供者(provide)、服務消費者(Comsumer)、注冊中心、監控中心組成

      服務提供者

      1、定義服務接口、提供接口實現類

      // 接口(對外暴露的服務) public interface DemoService { String sayHello(String name); } // 接口實現類 public class DemoServiceImpl implements DemoService { public String sayHello(String name) { return "Hello " + name; } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      2、配置對外暴露服務(dubbo-demo-provide.xml,也可以使用注解的方式實現)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      3、provide啟動類

      @SpringBootApplication public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } }

      1

      2

      3

      4

      5

      6

      服務消費者

      1、消費者配置(dubbo-consumer.xml)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      2、Consumer 啟動類

      @SpringBootApplication public class ConsumerApplication{ public static void main(String[] args) throws Exception { SpringApplication.run(ConsumerApplication.class, args); DemoService demoService = (DemoService)context.getBean("demoService"); // 獲取遠程服務代理 String hello = demoService.sayHello("world"); // 執行遠程方法 System.out.println( hello ); // 顯示調用結果 } }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      基本底層原理

      Dubbo流程(粗略思路)

      1、服務提供者提供接口、接口實現類(通過版本號區分多個實現類),對外暴露服務,通過共享注冊中心注冊服務(一般用zookeeper/redis)。

      為什么要使用共享注冊中心?

      由于服務消費者和服務提供者是分別啟動兩個JVM(兩個進程),所以需要使用共享注冊中心。注冊服務形式-服務名:List

      2、啟動Tomcat容器或Netty服務器

      需要HTTP/Netty客戶端,用來接收請求,需要HTTP/Netty服務端用來處理請求。

      3、服務消費者讀取用戶配置(共享注冊中心注冊的服務)

      服務路徑每次從共享注冊中心獲取,消耗網絡性能,所以先獲取存放至本地注冊中心緩存,數據保持同步。

      數據保持同步:

      4、定義數據傳輸類型(Invocation對象,序列化)

      構造Invocation對象:指定參數列表、方法、參數、地址、接口

      5、dubbo生成接口代理類放入spring容器,指定調用服務,發送請求

      指定服務:考慮支持集群,在代理類中,從注冊中心獲取到的服務路徑List有多個,使用負載均衡指定最終訪問的服務。

      為什么使用zookeeper/Redis作為共享注冊中心?

      在集群情況下會存在多個服務器,新增服務器注冊中心需要添加服務路徑,服務器掛了需要剔除服務路徑,集群發生變化時zookeeper可以通過監聽機制(Redis利用消費訂閱機制)保證數據同步。

      6、服務提供者接收處理請求

      其他部分細節

      多版本實現:對于多個實現類,服務提供者通過版本號區分(拼在服務名后),Dubbo中實現類使用@Service(version = “callback”)標識。

      支持多個協議以及協議切換:可以使用工廠模式根據配置協議名使用指定協議。

      新增協議:使用SPI機制。

      集群集群變更:利用心跳機制監控集群,zookeeper可通過臨時節點(Redis可通過過期時間節點)來實現心跳,這也是為什么注冊中心使用zookeeper/Redis而不使用MySQL等的原因之二。

      容錯:服務調用失敗可能是服務端調用失敗也有可能是網絡原因,Dubbo代理對象中捕獲異常,做相關的容錯處理。

      Mock:服務未實現完,沒必要進行網絡請求,在發送之前可以做mock邏輯。

      Dubbo TCP/IP

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:OpenHarmony LiteOS-A內核文檔之學習--系統調用(2)
      下一篇:華為平臺如何通過國標級聯方式注冊到EasyCVR視頻融合平臺?
      相關文章
      色久悠悠婷婷综合在线亚洲| 在线观看亚洲网站| 国产亚洲精品拍拍拍拍拍| 风间由美在线亚洲一区| 亚洲欧美日韩国产精品一区| 亚洲精品123区在线观看| 亚洲一区二区三区久久| 亚洲伊人久久大香线蕉在观| 亚洲免费黄色网址| 亚洲w码欧洲s码免费| 亚洲一级毛片免观看| 亚洲av无码一区二区三区天堂古代 | 亚洲成AⅤ人影院在线观看| 大桥未久亚洲无av码在线| 日本亚洲高清乱码中文在线观看| 男人的天堂av亚洲一区2区| 精品国产亚洲第一区二区三区| 国产成人高清亚洲一区91| 亚洲XX00视频| 亚洲人成网77777亚洲色 | 亚洲日本乱码在线观看| 亚洲区小说区激情区图片区| 亚洲国产婷婷六月丁香| 亚洲AV无码乱码国产麻豆| 亚洲人成网址在线观看| 亚洲国产日韩在线人成下载| 亚洲kkk4444在线观看| 国产精品亚洲专区无码牛牛 | 亚洲天堂久久精品| 亚洲春色在线观看| 亚洲午夜成人精品无码色欲| 亚洲欧美在线x视频| 亚洲午夜精品一级在线播放放| 国产亚洲色视频在线| 久久精品国产亚洲AV麻豆不卡| 久久夜色精品国产噜噜噜亚洲AV | 亚洲国产精品一区二区九九 | 亚洲色无码一区二区三区| 亚洲AV成人片色在线观看| 亚洲无圣光一区二区| 亚洲女子高潮不断爆白浆|