1. 程式人生 > 其它 >Dubbo入門到精通學習筆記(動力節點王鶴)

Dubbo入門到精通學習筆記(動力節點王鶴)

Dubbo學習筆記

  • 這篇筆記的學習視訊來自b站動力節點

https://space.bilibili.com/76542346/video

第一章 初識 Dubbo

1.1 架構

單體結構

垂直結構

分散式結構

流動計算結構

1.2 程序間通訊

程序:一個程序就是一個應用。

程序間通訊: 兩個或更多的應用之間的呼叫。

實現程序間通訊: 1) Servlet或Controller(1需要提供每個介面的url地址,2提供引數說明,3.引數不清楚型別(String)。4. http協議)

2) RPC (Remote Procedure Call) : 遠端過程呼叫。實現分散式中的服務之間呼叫。

RPC是遠端通訊的一種技術, 不是規範。 也可以叫做RPC協議。通過PRC簡化程序間通訊。

3)RPC呼叫

client(消費者:要使用提供者功能(方法提供))

server(提供者,提供方法的執行實現)

client---stub助手(序列化/反序列化)---網路----stub助手(反序列化/序列化)---提供者方法的實現

4)PRC能做什麼

PRC主要就是做分散式開發,實現遠端呼叫, 呼叫遠端的方法,就像呼叫自己的方法一樣

1.3 Dubbo簡介

Dubbo: 是一個RPC框架,實現遠端呼叫。

三個主要功能:

  1. 面向介面的遠端呼叫;
  2. 智慧容錯和負載均衡。
  3. 服務註冊和發現

第二章 Dubbo框架實現RPC

2.1 第一個服務提供者

使用直連方式,訪問提供者。

  1. 依賴:pom.xml
	<dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.7.8</version>
    </dependency>

2 ) 建立一個數據類,表示訂單的資訊

Order: 有id, goodsName ,price , amount

3) 建立服務提供者介面 OrderService

Order createOrder(Integer userId, String goodsName, Float price, Integer amount)

4)暴露服務,使用dubbo框架的功能。

把服務暴露出去,消費者才能呼叫。 暴露的就是介面。

需要在spring的配置檔案中宣告暴露服務


   <!--宣告dubbo的服務名稱,必須的
        name:服務名稱,推薦使用專案名稱,這個name的值最後是唯一的。
    -->
    <dubbo:application name="01-orderservce-provider" />

    <!--宣告使用的協議和埠:可選-->
    <dubbo:protocol name="dubbo" port="20880" />

    <!--宣告暴露的服務
        interface:要暴露的介面的全限定名稱
        ref:此介面的實現類物件的id
        registry:是否使用註冊中心, 直連專案不使用註冊中心, 賦值N/A
    -->
    <dubbo:service interface="com.bjpowernode.service.OrderService"
                   ref="orderServiceBean"
                   registry="N/A"  />

    <!--宣告Bean-->
    <bean id="orderServiceBean" class="com.bjpowernode.service.impl.OrderServiceImpl" />

5)把提供者安裝到maven倉庫中

maven install

2.2 第一個消費者

建立maven專案

1) pom.xml

加入dubbo依賴

    <!--加入dubbo的依賴-->
    <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.7.8</version>
    </dependency>

    <!--提供者座標-->
    <dependency>
      <groupId>com.bjpowernode</groupId>
      <artifactId>01-orderservce-provider</artifactId>
      <version>1.0.0</version>
    </dependency>

2)宣告要使用的dubbo服務提供者。 說明要使用的介面

在spring的配置檔案者, 宣告要使用的介面

2.3 Dubbo常用標籤

1) 公用標籤:在提供者和消費者中都使用的。

<dubbo:application name="" />

<dubbo:registry />  

2)提供者標籤

<dubbo:service interface="介面" />

3)消費者標籤

<dubbo:reference interface="介面">

2.4 Dubbo註解

@EnableDubbo , @EnableDubboConfig , @DubboComponentScan,
@DubboService,@DubboReference

@DubboService

@DubboService == <dubbo:service> 暴露服務的
    屬性:interface:介面的.class
    位置:放在介面的實現類的上面

@DubboReference

@DubboReference == <dubbo:reference> 引用遠端服務
    位置:可以放在屬性(成員變數)定義上面,可以方法上面

Dubbo元件掃描器:掃描的是Dubbo的註解(@DubboService,@DubboReference)

<dubbo:annotation package="dubbo 註解所在的包名" />

第三章 註冊中心

3.1 註冊中心作用

1) 服務管理, 發現服務,註冊服務

2) 實現故障處理

3)實現消費者和提供者的解耦合。

3.2 註冊中心

Nacos 註冊中心
Zookeeper 註冊中心(推薦)

3.3 Zookeeper

地址:https://zookeeper.apache.org , 下載zookeeper安裝檔案

需求: 使用zookeeper ,先有java環境。

安裝zookeeper

  1. 解壓縮 apache-zookeeper-3.5.5-bin.tar.gz

  2. 修改zookeeper配置檔案. zookeeper安裝目錄/conf/zoo_sample.cfg

    拷貝zoo_sample.cfg ,改名為 zoo.cfg

  3. 修改zoo.cfg檔案的內容

dataDir=目錄,自定義目錄,儲存zookeeper收到的資料。 目錄不要有空格,中文

admin.serverPort=自定義的埠號, 預設是8080, 改為 8888

  1. clientPort=2181 : dubbo程式訪問zookeeper的預設埠號 ,可以修改。

執行zookeeper

進入到zookeeper安裝目錄/bin.

zkServer.cmd: 服務端程式

zkCli.cmd 客戶端程式

3.4 dubbo專案者使用Zookeeper

1 ) 在提供者和消費者中都需要使用 zookeeper client 。 使用client 是zookeeper資料交換

<!--zookeeper 客戶端-->
<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-framework</artifactId>
    <version>4.0.1</version>
</dependency>

<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.0.1</version>
</dependency>
  1. 提供和消費者的配置檔案者,提供zookeeper的地址資訊
<dubbo:registry address="zookeeper的ip和埠" />

訪問zookeeper:

1)可以zkCli.cmd 客戶端程式, 使用 ls 目錄

2) 使用圖形介面工具。 ZooInspector.zip

​ java -jar zookeeper-dev-ZooInspector.jar

3.5 使用Nacos

地址:https://nacos.io

下載地址: https://github.com/alibaba/nacos/releases

3.6 使用Nacos的提供者。

1)nacos依賴

<!-- Dubbo Nacos registry dependency -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-registry-nacos</artifactId>
    <version>2.7.8</version>
</dependency>
<!-- Keep latest Nacos client version -->
<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>1.3.1</version>
</dependency>
<!-- Alibaba Spring Context extension -->
<dependency>
    <groupId>com.alibaba.spring</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>1.0.8</version>
</dependency>
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.54.Final</version>
</dependency>
<!-- Dubbo dependency -->
<dependency>
     <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.7.8</version>
</dependency>

2)在配置檔案中,宣告nacos註冊中心

<dubbo:registory address="nacos://localhost:8848" />

第四章 匹配服務

預設使用介面名稱作為服務匹配,找到服務提供者。

dubbo使用介面, version, group 三個值唯一匹配服務。 當沒有version或者group使用介面名稱作為唯一匹配條件

version:表示版本

group:分組

使用version,group區分介面的不同實現。

4.1 version

version:版本。 可以用來區分同一個介面的不同實現。 消費者和提供者必須使用相同的版本,否則呼叫失敗。

提供者
<dubbo:service interface="xxxx.SomeService" version="1.0" />
dubbo使用: xxxx.SomeService:1.0 表示這個唯一的服務提供者

消費者:
<dubbo:reference interface="xxxx.SomeService" version="1.0" />
dubbo呼叫: xxxx.SomeService:1.0 呼叫對於的提供者

4.2 group

使用group區分服務的不同實現,介面的不同使用。 消費者和提供者要匹配group名稱。

提供者:
<!--暴露服務使用group-->
<dubbo:service interface="com.bjpowernode.service.MenuService"
                   ref="fileService"
                   group="file" />

<dubbo:service interface="com.bjpowernode.service.MenuService"
                   ref="editMenuService"
                   group="edit" />


消費者:使用指定組

 <dubbo:reference interface="com.bjpowernode.service.MenuService"
                     id="fileMenuService"
                     group="file" />

 使用任意組
 <dubbo:reference interface="com.bjpowernode.service.MenuService"
                     id="fileMenuService"
                     group="*" />

4.3 Dubbo中的Filter

使用自定義Filter步驟:

  1. 建立類實現org.apache.dubbo.rpc.Filter介面, 實現invoke()

  2. 配置自定義Filter。

    1)在 resources 下建立 META-INF/dubbo 目錄

    2)建立文字檔案,名稱org.apache.dubbo.rpc.Filter

    3)在檔案中,說明自定義的Filter類資訊

    ​ 自定義過濾器物件名稱=自定義過濾器類的全限定名稱

  3. 指定提供者使用某個Filter物件

    <dubbo:service interface="com.bjpowernode.service.HelloService" filter="filter自定義名稱"/>
    
  4. 消費者呼叫提供者, 先執行filter

第五章: 管理控制檯(Dubbo Admin)

5.1 簡介

管理控制檯:就是一個web應用, 是dubbo服務的管理程式。 配置提供者,消費者的一些引數, 提供訪問控制的處理。

管理控制檯:是dubbo專案組寫好的程式。 我們需要編譯安裝這個程式就可以。 前端使用的vue框架,後端是SpringBoot。

5.2 下載管理控制檯原始碼

下載原始碼

https://github.com/apache/dubbo-admin

使用步驟:

  1. 下載程式碼: git clone https://github.com/apache/dubbo-admin.git

  2. dubbo-admin-server/src/main/resources/application.properties中指定註冊中心地址

  3. 構建

    • mvn clean package
  4. 啟動cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar

管理控制檯(Dubbo Admin)

5.1 簡介

管理控制檯:就是一個web應用, 是dubbo服務的管理程式。 配置提供者,消費者的一些引數, 提供訪問控制的處理。

管理控制檯:是dubbo專案組寫好的程式。 我們需要編譯安裝這個程式就可以。 前端使用的vue框架,後端是SpringBoot。

5.2 下載管理控制檯原始碼

下載原始碼

https://github.com/apache/dubbo-admin

使用步驟:

  1. 下載程式碼: git clone https://github.com/apache/dubbo-admin.git

  2. dubbo-admin-server/src/main/resources/application.properties中指定註冊中心地址

  3. 構建

    • mvn clean package
  4. 啟動cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar

  5. 訪問 http://localhost:8080`