Dubbo是什麼?核心總結

jiuchengi發表於2022-03-10

Dubbo

——是SOA架構的具體的實現框架!

2.1 Dubbo簡介

Apache Dubbo是一款高效能的Java RPC框架。官網地址:[http://dubbo.apache.org]

  • dubbo由阿里開發,2018年捐獻給Apache基金會

  • RPC全稱為remote procedure call,即遠端過程呼叫, 它可以讓我們呼叫本地方法一樣來呼叫遠端方法

2.2 Dubbo架構 (重點)

 

 節點角色說明:

 

 

呼叫關係說明:

  1. 服務容器負責啟動,載入,執行服務提供者。

  2. 服務提供者在啟動時,向註冊中心註冊自己提供的服務。

  3. 服務消費者在啟動時,向註冊中心訂閱自己所需的服務。

  4. 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者。

  5. 服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫。

  6. 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心。

面試相關:

  1. 服務消費者和註冊中心是基於推模式還是拉模式獲取服務的。

  2. 如果服務註冊中心當機了, 會不會影響到服務的正常呼叫

  3. 在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.cfgzoo.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>

dubbo版本2.7+,連線zookeeper客戶端是curator;

dubbo版本2.6-,zookeeper客戶端是zkClient。

2)配置檔案

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns:context="http://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>

dubbo版本不同,會導致引入的xml約束檔案也不相同!

2.7+版本:

xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"

http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd

2.6-版本:

xmlns:dubbo="http://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>

3)業務程式碼+註解

介面

public interface UserService {
    public String sayHello();
}

實現類

@org.apache.dubbo.config.annotation.Service
public class UserServiceImpl implements UserService {

    public String sayHello() {
        return "hello dubbo hello!~";
    }
}

4)啟動服務

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>

2)配置檔案

----連線zoo,要服務介面

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.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">

    <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();
    }
}

4)啟動呼叫

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

相關文章