目標
從零上手開發基于 Dubbo 的微服務
難度
低
環境要求
-
系統:Windows、Linux、MacOS
-
JDK 8 及以上(推薦使用 JDK17)
-
Git
-
IntelliJ IDEA(可選)
-
Docker (可選)
動手實踐
本章將通過手把手的教程一步一步教你如何從零開發一個微服務應用,
1. 啟動注冊中心
對于一個微服務化的應用來說,注冊中心是不可或缺的一個組件,只有通過注冊中心,消費端才可以成功發現服務端的地址資訊,進而進行呼叫,
為了讓本教程更易于上手,我們提供了一個基于 Apache Zookeeper 注冊中心的簡易啟動器,如果您需要在生產環境部署注冊中心,請參考生產環境初始化一文部署高可用的注冊中心,
Windows:
git clone --depth=1 --branch master [email protected]:apache/dubbo-samples.git
cd dubbo-samples
./mvnw.cmd clean compile exec:java -pl tools/embedded-zookeeper
Linux / MacOS:
git clone --depth=1 --branch master [email protected]:apache/dubbo-samples.git
cd dubbo-samples
./mvnw clean compile exec:java -pl tools/embedded-zookeeper
Docker:
docker run --name some-zookeeper --restart always -d zookeeper
2. 初始化專案
從本小節開始,將基于 IntelliJ IDEA 進行工程的搭建以及測驗,

如上圖所示,可以建立一個基礎的專案,

在初始化完專案之后,需要在 src/main/java 目錄下創建 org.apache.dubbo.samples.api 、org.apache.dubbo.samples.client 和 org.apache.dubbo.samples.provider 三個 package,
后續我們將在 api 下創建對應的介面,在 client 下創建對應客戶端訂閱服務的功能,在 provider 下創建對應服務端的實作以及發布服務的功能,
上述三個 package 分別對應了應用共同依賴的 api、消費端應用的模塊、服務端應用的模塊,在實際部署中需要拆成三個工程,消費端和服務的共同依賴 api 模塊,從簡單出發,本教程將在同一個工程中進行開發,區分多個啟動類,
3. 添加 Maven 依賴
在初始化完專案以后,我們需要先添加 Dubbo 相關的 maven 依賴,

編輯 pom.xml 這個檔案,添加下列配置,
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>3.2.0-beta.4</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-x-discovery</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.8.0</version>
<exclusions>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-handler</artifactId>
</exclusion>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-transport-native-epoll</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
在這份配置中,定義了 dubbo 和 zookeeper(以及對應的連接器 curator)的依賴,

添加了上述的配置以后,可以通過 IDEA 的 Maven - Reload All Maven Projects 重繪依賴,
4. 定義服務介面
服務介面 Dubbo 中溝通消費端和服務端的橋梁,

在 org.apache.dubbo.samples.api 下建立 GreetingsService 介面,定義如下:
package org.apache.dubbo.samples.api;
public interface GreetingsService {
String sayHi(String name);
}
在 GreetingsService 中,定義了 sayHi 這個方法,后續服務端發布的服務,消費端訂閱的服務都是圍繞著 GreetingsService 介面展開的,
5. 定義服務端的實作
定義了服務介面之后,可以在服務端這一側定義對應的實作,這部分的實作相對于消費端來說是遠端的實作,本地沒有相關的資訊,

在 org.apache.dubbo.samples.provider 下建立 GreetingsServiceImpl 類,定義如下:
package org.apache.dubbo.samples.provider;
import org.apache.dubbo.samples.api.GreetingsService;
public class GreetingsServiceImpl implements GreetingsService {
@Override
public String sayHi(String name) {
return "hi, " + name;
}
}
在 GreetingsServiceImpl 中,實作了 GreetingsService 介面,對于 sayHi 方法回傳 hi, name,
6. 服務端發布服務
在實作了服務之后,本小節將通過 Dubbo 的 API 在網路上發布這個服務,

在 org.apache.dubbo.samples.provider 下建立 Application 類,定義如下:
package org.apache.dubbo.samples.provider;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.samples.api.GreetingsService;
public class Application {
public static void main(String[] args) {
// 定義具體的服務
ServiceConfig<GreetingsService> service = new ServiceConfig<>();
service.setInterface(GreetingsService.class);
service.setRef(new GreetingsServiceImpl());
// 啟動 Dubbo
DubboBootstrap.getInstance()
.application("first-dubbo-provider")
.registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
.protocol(new ProtocolConfig("dubbo", -1))
.service(service)
.start()
.await();
}
}
在 org.apache.dubbo.samples.provider.Application 中做了兩部分的功能:首先是基于 ServiceConfig 定義了發布的服務資訊,包括介面的資訊以及對應的實作類物件;然后是配置 Dubbo 啟動器,傳入了應用名,注冊中心地址,協議的資訊以及服務的資訊等,
注:DubboBootstrap 中的registry 、protocol 和 service 可以多次傳入,
7. 消費端訂閱并呼叫
對于消費端,可以通過 Dubbo 的 API 可以進行消費端訂閱,

在 org.apache.dubbo.samples.client 下建立 Application 類,定義如下:
package org.apache.dubbo.samples.client;
import java.io.IOException;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.RegistryConfig;
import org.apache.dubbo.config.bootstrap.DubboBootstrap;
import org.apache.dubbo.samples.api.GreetingsService;
public class Application {
public static void main(String[] args) throws IOException {
ReferenceConfig<GreetingsService> reference = new ReferenceConfig<>();
reference.setInterface(GreetingsService.class);
DubboBootstrap.getInstance()
.application("first-dubbo-consumer")
.registry(new RegistryConfig("zookeeper://127.0.0.1:2181"))
.reference(reference);
GreetingsService service = reference.get();
String message = service.sayHi("dubbo");
System.out.println("Receive result ======> " + message);
System.in.read();
}
}
在 org.apache.dubbo.samples.client.Application 中做了三部分的功能:
首先是基于 ReferenceConfig 定義了訂閱的服務資訊,包括介面的資訊,
其次是配置 Dubbo 啟動器,傳入了應用名,注冊中心地址,協議的資訊以及服務的資訊等,
最后是獲取到動態代理的物件并進行呼叫,
注:DubboBootstrap 中支持 service 和 reference 可以同時傳入,意味著一個應用可以同時即是消費端、也是服務端,
8. 啟動應用
截止第 7 步,代碼就已經開發完成了,本小節將啟動整個專案并進行驗證,

首先是啟動 org.apache.dubbo.samples.provider.Application ,等待一會出現如下圖所示的日志(DubboBootstrap awaiting)即代表服務提供者啟動完畢,標志著該服務提供者可以對外提供服務了,
[DUBBO] DubboBootstrap awaiting ..., dubbo version: 3.2.0-beta.4, current host: 169.254.44.42
然后是啟動org.apache.dubbo.samples.client.Application ,等待一會出現如下圖所示的日志(hi, dubbo )即代表服務消費端啟動完畢并呼叫到服務端成功獲取結果,

Receive result ======> hi, dubbo
延伸閱讀
1. Dubbo 的配置介紹
Dubbo 的主要配置入口有ReferenceConfig 、ServiceConfig 和 DubboBootstrap ,更多的細節可以參考 API 配置 | Apache Dubbo 一文,
2. 除了 API 方式其他的使用方式
Dubbo 除了 API 方式還支持 Spring XML、Annotation、Spring Boot 等配置方式,在下一個教程中將就 Spring Boot 配置方式講解如何進行快速開發,
關于 XML 和 Annotation 的細節可以參考 XML 配置 | Apache Dubbo、Annotation 配置 | Apache Dubbo 疑問,
更多
本教程介紹了如何基于 Dubbo 的純 API 開發一個微服務應用,下一個教程中,將介紹如何基于 Spring Boot 開發微服務專案,
歡迎在 https://github.com/apache/dubbo 給 Dubbo Star,
搜索關注官方微信公眾號:Apache Dubbo,了解更多業界最新動態,掌握大廠面試必備 Dubbo 技能
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/542861.html
標籤:其他
上一篇:若依-更換資料庫-sqlite
