Dubbo是什麼?核心總結
- 2022 年 3 月 10 日
- 筆記
2.1 Dubbo簡介
Apache Dubbo是一款高性能的Java RPC框架。官網地址:[//dubbo.apache.org]
-
dubbo由阿里開發,2018年捐獻給Apache基金會
-
RPC全稱為remote procedure call,即遠程過程調用, 它可以讓我們調用本地方法一樣來調用遠程方法
節點角色說明:
調用關係說明:
-
服務容器負責啟動,載入,運行服務提供者。
-
服務提供者在啟動時,向註冊中心註冊自己提供的服務。
-
服務消費者在啟動時,向註冊中心訂閱自己所需的服務。
-
註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者。
-
服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一台提供者進行調用,如果調用失敗,再選另一台調用。
-
服務消費者和提供者,在記憶體中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。
面試相關:
服務消費者和註冊中心是基於推模式還是拉模式獲取服務的。
如果服務註冊中心宕機了, 會不會影響到服務的正常調用
在dubbo的各個服務組件調用中中, 什麼地方用的是長連接, 什麼地方用的是短連接
2.3 Dubbo入門(重點)
2.3.1 服務註冊中心
註冊中心負責服務地址的註冊與查找,服務提供者和消費者與註冊中心交互。
Dubbo支援的服務註冊中心有很多,比如zookeeper、redis等等,官方推薦使用 zookeeper 註冊中心。
2.3.2 zookeeper本地安裝
——課上安裝在linux中,為了使用方便,也可以本地安裝
1)安裝
將zookeeper-3.4.6.zip複製到一個沒有中文,沒有空格的目錄,然後解壓,即安裝成功!
2)配置
進入到zookeeper的配置目錄conf下,複製
zoo_sample.cfg
為zoo.cfg
3)啟動
進入到zookeeper的bin目錄下,雙擊zkServer.cmd啟動服務!
2.3.3 dubbo服務提供者
——參考課上影片資料
1)坐標
<dubbo.version>2.7.4.1</dubbo.version> <zookeeper.version>4.0.0</zookeeper.version> <!--Dubbo的起步依賴,版本2.7之後統一為org.apache.dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <!--ZooKeeper客戶端實現 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>${zookeeper.version}</version> </dependency> <!--ZooKeeper客戶端實現 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>${zookeeper.version}</version> </dependency>
2)配置文件
<beans xmlns="//www.springframework.org/schema/beans" xmlns:xsi="//www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="//dubbo.apache.org/schema/dubbo" xmlns:context="//www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 連接zoo,聲明我的服務名,將服務進行註冊 --> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <dubbo:application name="dubbo-service"/> <dubbo:annotation package="com.itheima.service.impl" /> <!-- dubbo需要web容器(tomcat8080)進行啟動;dubbo對外公布dubbo服務,佔用服務埠 --> <dubbo:protocol port="20880"/> </beans>
2.7+版本:
xmlns:dubbo="//dubbo.apache.org/schema/dubbo" http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd2.6-版本:
xmlns:dubbo="//code.alibabatech.com/schema/dubbo" http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd需要提供一個web.xml,載入該配置文件——利用spring初始化!
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/applicationContext*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
public interface UserService { public String sayHello(); }實現類
@org.apache.dubbo.config.annotation.Service public class UserServiceImpl implements UserService { public String sayHello() { return "hello dubbo hello!~"; } }
tomcat7插件
2.3.4 dubbo服務消費者
——參考課上影片資料
1)依賴
<!--Dubbo的起步依賴,版本2.7之後統一為rg.apache.dubb --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <!--ZooKeeper客戶端實現 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>${zookeeper.version}</version> </dependency> <!--ZooKeeper客戶端實現 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>${zookeeper.version}</version> </dependency>
<beans xmlns="//www.springframework.org/schema/beans" xmlns:xsi="//www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="//dubbo.apache.org/schema/dubbo" xmlns:mvc="//www.springframework.org/schema/mvc" xmlns:context="//www.springframework.org/schema/context" xsi:schemaLocation="//www.springframework.org/schema/beans //www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc //www.springframework.org/schema/mvc/spring-mvc.xsd http://dubbo.apache.org/schema/dubbo //dubbo.apache.org/schema/dubbo/dubbo.xsd //www.springframework.org/schema/context //www.springframework.org/schema/context/spring-context.xsd"> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <dubbo:application name="dubbo-web" > <dubbo:parameter key="qos.port" value="33333"/> </dubbo:application> <!-- 包掃描:載入bean;識別@Reference註解,遠程注入!--> <dubbo:annotation package="com.itheima.controller" /> </beans>3)調用業務程式碼
@RestController @RequestMapping("/user") public class UserController { @Reference//遠程注入 private UserService userService; @RequestMapping("/sayHello") public String sayHello(){ return userService.sayHello(); } }
tomcat7:run
2.3.5 統一介面優化
——參考課上影片資料
——基於maven依賴某模組完成,利用依賴傳遞
2.4 dubbo-admin
——只作為監控服務來看待,不影響dubbo的正常服務調用!
1)安裝
將提供的dubbo-admin.war放置到tomcat的webapps目錄下,啟動tomcat即可!如果zookeeper位置不是本地,則需要修改配置文件:
2)使用
三、Dubbo高級
——以下部分用於面試
序列化
dubbo見傳遞對象,該對象需要實現序列化介面
服務超時
多版本(重點)
負載均衡
容錯
服務降級
啟動檢查
啟動時檢查,配置在服務消費者一方,用於服務消費者在啟動的時候主動檢查註冊中心或者服務提供者是否準備好提供服務
如果配置為false,代表不檢查
如果配置為true,代表檢查,一旦檢查到服務提供者未準備好,就會直接拋異常
建議在開發階段設置為false,在生產環境下改為true(默認)
dubbo: consumer: check: false registry: check: false