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框架,實現遠端呼叫。
三個主要功能:
- 面向介面的遠端呼叫;
- 智慧容錯和負載均衡。
- 服務註冊和發現
第二章 Dubbo框架實現RPC
2.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
-
解壓縮 apache-zookeeper-3.5.5-bin.tar.gz
-
修改zookeeper配置檔案. zookeeper安裝目錄/conf/zoo_sample.cfg
拷貝zoo_sample.cfg ,改名為 zoo.cfg
-
修改zoo.cfg檔案的內容
dataDir=目錄,自定義目錄,儲存zookeeper收到的資料。 目錄不要有空格,中文
admin.serverPort=自定義的埠號, 預設是8080, 改為 8888
- 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>
- 提供和消費者的配置檔案者,提供zookeeper的地址資訊
<dubbo:registry address="zookeeper的ip和埠" />
訪問zookeeper:
1)可以zkCli.cmd 客戶端程式, 使用 ls 目錄
2) 使用圖形介面工具。 ZooInspector.zip
java -jar zookeeper-dev-ZooInspector.jar
3.5 使用Nacos
下載地址: 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步驟:
-
建立類實現org.apache.dubbo.rpc.Filter介面, 實現invoke()
-
配置自定義Filter。
1)在 resources 下建立 META-INF/dubbo 目錄
2)建立文字檔案,名稱org.apache.dubbo.rpc.Filter
3)在檔案中,說明自定義的Filter類資訊
自定義過濾器物件名稱=自定義過濾器類的全限定名稱
-
指定提供者使用某個Filter物件
<dubbo:service interface="com.bjpowernode.service.HelloService" filter="filter自定義名稱"/>
-
消費者呼叫提供者, 先執行filter
第五章: 管理控制檯(Dubbo Admin)
5.1 簡介
管理控制檯:就是一個web應用, 是dubbo服務的管理程式。 配置提供者,消費者的一些引數, 提供訪問控制的處理。
管理控制檯:是dubbo專案組寫好的程式。 我們需要編譯安裝這個程式就可以。 前端使用的vue框架,後端是SpringBoot。
5.2 下載管理控制檯原始碼
下載原始碼
https://github.com/apache/dubbo-admin
使用步驟:
-
下載程式碼:
git clone https://github.com/apache/dubbo-admin.git
-
在
dubbo-admin-server/src/main/resources/application.properties
中指定註冊中心地址 -
構建
mvn clean package
-
啟動
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
使用步驟:
-
下載程式碼:
git clone https://github.com/apache/dubbo-admin.git
-
在
dubbo-admin-server/src/main/resources/application.properties
中指定註冊中心地址 -
構建
mvn clean package
-
啟動
cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar
-
訪問 http://localhost:8080`