SpringBoot使用Dubbo的全過程(直連模式)
1.什么是Dubbo
Dubbo 是一款高性能、輕量級的 Java 分布式服務(wù)框架(RPC 框架),專門用來做 “微服務(wù)之間的遠(yuǎn)程調(diào)用”。簡單說:A 服務(wù) 想調(diào)用 B 服務(wù) 的方法,像調(diào)用本地方法一樣方便,底層就是 Dubbo 幫你做通信。

Registry(注冊中心):注冊中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更,注冊中心將基于長連接推送變更數(shù)據(jù)給消費(fèi)者。
Consumer(服務(wù)消費(fèi)者):調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方,服務(wù)消費(fèi)者在啟動時(shí),向注冊中心訂閱自己所需的服務(wù),服務(wù)消費(fèi)者,從提供者地址列表中,基于軟負(fù)載均衡算法,選一臺提供者進(jìn)行調(diào)用,如果調(diào)用失敗,再選另一臺調(diào)用。
Monitor(監(jiān)控中心):服務(wù)消費(fèi)者和提供者,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心。
Provider(服務(wù)提供者)暴露服務(wù)的服務(wù)提供方,服務(wù)提供者在啟動時(shí),向注冊中心注
冊自己提供的服務(wù)。

核心作用:
(1)遠(yuǎn)程服務(wù)調(diào)用(RPC):讓服務(wù)之間像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程接口,屏蔽網(wǎng)絡(luò)細(xì)節(jié)。
(2)服務(wù)注冊與發(fā)現(xiàn):服務(wù)啟動時(shí)把自己注冊到注冊中心(如 Nacos、ZooKeeper),調(diào)用方自動發(fā)現(xiàn)可用服務(wù)。
(3)負(fù)載均衡、容錯、限流:自動把請求分給多臺服務(wù)器,某臺掛了自動切換,保證系統(tǒng)高可用。
說明:本文只簡單搭建和使用Dubbo,后續(xù)文章會整合成分布式架構(gòu)。
本文用的工具:
IDEA版本:2026.1
JDK版本:17
Spring Boot版本:3.x
Dubbo版本:3.3.0
本文先創(chuàng)建父模塊,然后分別創(chuàng)建 生產(chǎn)者 和 消費(fèi)者
本文項(xiàng)目結(jié)構(gòu)如下:
D:\Project\test\dubbo_demo
│
├── pom.xml # 父工程 Maven 配置
│
├── dubbo-api/ # 接口模塊
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ ── com.guo.service/
│ │ │ └── DogService.java
│ │ └── resources/
│ └── test/java/
│
├── dubbo-provider/ # 服務(wù)提供者模塊
│ ├── pom.xml
│ ── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com.guo/
│ │ │ ├── ProviderApplication.java
│ │ │ └── service/
│ │ │ └── DogServiceImpl.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/java/
│
└── dubbo-consumer/ # 服務(wù)消費(fèi)者模塊
├── pom.xml
└── src/
├── main/
│ ├── java/
│ │ └── com.guo/
│ │ ├── ConsumerApplication.java
│ │ └── controller/
│ │ └── DogController.java
│ └── resources/
│ └── application.yml
└── test/java/
2.搭建父模塊
2.1 創(chuàng)建父模塊項(xiàng)目
父模塊本身沒有其他代碼,主要用來管理子模塊(實(shí)際上就是一個(gè)空Maven項(xiàng)目)。

這里選擇“Java”,構(gòu)建系統(tǒng)選擇“Maven”,JDK這里選17,然后點(diǎn)擊下面的創(chuàng)建。

創(chuàng)建完畢后,默認(rèn)界面如下:

父工程沒有其他的代碼,只有一些依賴,所以這里直接把src文件刪除,右擊src文件夾,然后選擇“刪除”

然后,需要修改packaging,打開pom.xml,把下面的內(nèi)容放到pom.xml中。(這行的意思是表示父工程,負(fù)責(zé)管理,不負(fù)責(zé)代碼)
<packaging>pom</packaging>

2.2 添加公共依賴
因?yàn)楹竺鏁?chuàng)建子模塊,子模塊需要依賴,如果子模塊很多,需要填寫的依賴就很多。此時(shí),我們可以在父模塊引入依賴,子模塊沿用父模塊的依賴即可。
打開父工程的pom.xml,然后添加spring boot、dubbo的一些依賴。
另外, 也增加了上面關(guān)于版本的定義,比如
<spring-boot.version>3.5.14</spring-boot.version>
然后有三種方式來下載依賴:
第一種:點(diǎn)擊下圖的1位置。
第二種:先點(diǎn)擊下圖的A,再點(diǎn)擊B。
第三種:雙擊下圖綠的的框。

下面的pom.xml中內(nèi)容的參考(請參考下圖的依賴)。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.guo</groupId>
<artifactId>dubbo-demo2</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-boot.version>3.5.14</spring-boot.version>
<dubbo.version>3.3.0</dubbo.version>
<jdk.version>17</jdk.version>
</properties>
<!-- 依賴管理:子模塊可直接繼承,無需重復(fù)引入 -->
<dependencyManagement>
<dependencies>
<!-- Spring Boot 核心依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${spring-boot.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<!-- Dubbo 核心依賴 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 插件管理,子模塊繼承 -->
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>下載依賴后的參考界面如下:

父模塊無需編寫 Java 代碼,僅負(fù)責(zé) 依賴版本管理 和 子模塊關(guān)聯(lián),后續(xù)子模塊直接繼承父模塊的依賴配置,避免版本沖突。
3.搭建api部分
3.1 創(chuàng)建api模塊
api模塊只對外提供接口,所有調(diào)用關(guān)系都有api模塊來完成。

新建模塊這里選擇“Java”,名稱填寫“dubbo-api”,構(gòu)建方式選Maven,JDK這里選17的版本,然后點(diǎn)擊“創(chuàng)建”

創(chuàng)建完了后項(xiàng)目如下:
可以看到,父級的pom文件中,自動增加了我們剛才創(chuàng)建的module

3.2 創(chuàng)建一個(gè)接口
我們創(chuàng)建一個(gè)Service接口。創(chuàng)建之前,先創(chuàng)建包。
右擊 dubbo-api模塊的java文件夾。
選擇“新建”—>“軟件包”。

包名可以參考下面這樣,可以寫成這樣的的目錄。
com.guo.service

注意:我們這里只是簡單的提供了一個(gè)service層, 實(shí)際開發(fā)中,可能還有其他的軟件包,比如
com.guo.entity等,這里不做演示。
創(chuàng)建完后,項(xiàng)目結(jié)構(gòu)如下:

然后,右擊剛才創(chuàng)建的文件夾service,選擇"新建"—>“Java類”

這里創(chuàng)建的接口的名字假如是 DogService
注意:這里選的是“接口”,(interface ),不是類。然后按回車確認(rèn)。

在里面增加一行代碼:
String sayHello(String name);
完整代碼參考如下:
package com.guo.service;
public interface DogService {
//一個(gè)接口
String sayHello(String name);
}
3.搭建 生成者(服務(wù)提供者)模塊
這里的生產(chǎn)者主要的功能是提供服務(wù)(數(shù)據(jù)等),往前要去實(shí)現(xiàn)前面的接口,往后要做一些查詢操作。本文只演示實(shí)現(xiàn)接口部分。
3.1 創(chuàng)建模塊
右擊父工程,選擇“新建”—>“模塊”

填寫相關(guān)的內(nèi)容,然后點(diǎn)擊創(chuàng)建。

創(chuàng)建完后,項(xiàng)目結(jié)構(gòu)如下:

3.2 添加依賴
這個(gè)模塊需要增加一些依賴,打開dubbo-provider模塊的pom.xml文件,增加下面的依賴

整體代碼參考如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.guo</groupId>
<artifactId>dubbo_demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>dubbo-provider</artifactId>
<dependencies>
<!--dubbo 與 spring-boot 整合包-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<!--springboot 啟動核心包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>3.3 添加實(shí)現(xiàn)類
這里主要實(shí)現(xiàn)api模塊的DogService接口。
先創(chuàng)建項(xiàng)目包。
右擊dubbo-provider中的java文件夾,選擇“新建”—>“軟件包”。

軟件包的包名參考為 com.guo.service,然后按回車確定。

右擊剛才創(chuàng)建的service文件夾,選擇“新建”—>“Java類”

實(shí)現(xiàn)類的名字是 DogServiceImpl

然后我們讓這個(gè)實(shí)現(xiàn)類去實(shí)現(xiàn)api模塊的接口。
參考代碼如下:
package com.guo.service;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;
@DubboService
@Component
public class DogServiceImpl implements DogService{
@Override
public String sayHello(String name) {
return "Hello, " + name + " (from direct provider)";
}
}注意,當(dāng)你去實(shí)現(xiàn)DogService這個(gè)接口時(shí)候,報(bào)錯是正常的,

解決這個(gè)報(bào)錯很簡單,把鼠標(biāo)放上去,會看到一個(gè)“更多操作”,然后點(diǎn)擊“更多操作"

在彈出的菜單里面點(diǎn)擊“添加對模塊xxxx的依賴”

此時(shí),你會發(fā)現(xiàn),當(dāng)前這個(gè)模塊的pom.xml文件中多了一個(gè)依賴(就是我們前面創(chuàng)建的dubbo-api模塊)。

3.4 創(chuàng)建啟動類
右擊dubbo-provider中的 “guo”這個(gè)文件夾(注意啟動類的位置)

類名為:ProviderApplication
然后按回車

啟動類的參考代碼如下:
package com.guo;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubbo
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
System.out.println("Dubbo Provider started.");
}
}添加完代碼后,項(xiàng)目參考如下:

3.5 添加配置文件
右擊dubbo-provider中的resources文件夾,選擇“新建" ,然后點(diǎn)擊“文件”

這個(gè)配置文件的名字叫:application.yml
里面參考的配置內(nèi)容如下:
server:
port: 8081
dubbo:
application:
name: dubbo-provider
protocol:
name: dubbo
port: 20880 # dubbo 服務(wù)端口,消費(fèi)者直連時(shí)需要
qos:
enable: false添加后,項(xiàng)目內(nèi)容如下:

4.搭建 消費(fèi)者模塊
消費(fèi)者模塊和生產(chǎn)者模塊非常類似。
4.1 創(chuàng)建模塊
右擊項(xiàng)目名,點(diǎn)擊“新建”—>“模塊”。

然后參考輸入下面的內(nèi)容

創(chuàng)建完畢以后,項(xiàng)目結(jié)構(gòu)如下:

4.2 添加依賴
打開dubbo-provider模塊的依賴文件,參考增加下面的內(nèi)容

參考代碼:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.guo</groupId>
<artifactId>dubbo_demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>dubbo-consumer</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>4.3 添加Contorller
先新建軟件包,右擊java,選擇“新建”——>“軟件包”

參考輸入下面的內(nèi)容:
com.guo.controller

然后,繼續(xù)右擊Controller,點(diǎn)擊“新建”,然后點(diǎn)擊“Java 類”

Controller的名字假定為:DogController

代碼參考如下:
package com.guo.controller;
import com.guo.service.DogService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DogController {
// 直連模式:直接指定 Provider 的地址和 Dubbo 端口
@DubboReference(url = "dubbo://127.0.0.1:20880")
private DogService dogService;
@GetMapping("/hello")
public String sayHello(@RequestParam("name") String name) {
return dogService.sayHello(name);
}
}
4.4 創(chuàng)建啟動類
右擊“guo”這個(gè)文件夾,選擇“新建”—>“Java類”

類名為:ConsumerApplication

代碼參考:
package com.guo;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableDubbo
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
4.5 添加配置文件
右擊“resources”文件,選擇 “新建”—>“文件”

文件的名字為:
application.yml

內(nèi)容參考如下:
server:
port: 8082
dubbo:
application:
name: dubbo-demo-consumer
# 不需要任何注冊中心配置
qos:
enable: false
5.啟動測試
先啟動生產(chǎn)者Provider模塊

再啟動消費(fèi)者模塊(Consumer)

可以看到正常啟動:

然后打開瀏覽器,在瀏覽器中輸入下面的地址:
http://localhost:8082/hello?name=張三
看到下面內(nèi)容,表示成功:

本文參考代碼如下:dubbo_demo.zip
鏈接: https://pan.baidu.com/s/1ScG54D-WSSHw6k33hnH7ig?pwd=29r2
到此這篇關(guān)于SpringBoot使用Dubbo的全過程(直連模式)的文章就介紹到這了,更多相關(guān)SpringBoot使用Dubbo內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springboot使用dubbo和zookeeper代碼實(shí)例
- Springboot整合Dubbo+Nacos實(shí)現(xiàn)RPC調(diào)用的示例代碼
- 在SpringBoot中無縫整合Dubbo的實(shí)現(xiàn)過程
- springboot發(fā)布dubbo服務(wù)注冊到nacos實(shí)現(xiàn)方式
- SpringBoot整合Dubbo+Zookeeper實(shí)現(xiàn)RPC調(diào)用
- springboot-dubbo cannot be cast to問題及解決
- SpringBoot集成Dubbo啟用gRPC協(xié)議
- 基于SpringBoot的Dubbo泛化調(diào)用的實(shí)現(xiàn)代碼
- springboot?集成dubbo的步驟詳解
- spring/springboot整合dubbo詳細(xì)教程
相關(guān)文章
Spring?Cloud灰度部署實(shí)現(xiàn)過程詳解
這篇文章主要為大家介紹了Spring?Cloud灰度部署實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Maven多個(gè)項(xiàng)目實(shí)現(xiàn)聚合過程解析
這篇文章主要介紹了Maven多個(gè)項(xiàng)目實(shí)現(xiàn)聚合過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
使用Spring的AbstractRoutingDataSource實(shí)現(xiàn)多數(shù)據(jù)源切換示例
這篇文章主要介紹了使用Spring的AbstractRoutingDataSource實(shí)現(xiàn)多數(shù)據(jù)源切換示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
VSCode?Java項(xiàng)目JDK配置完整攻略指南(JDK版本切換不求人)
JDK是指Java軟件開發(fā)工具包,是Java編程語言的官方實(shí)現(xiàn),由Oracle公司提供,不斷更新和維護(hù),這篇文章主要介紹了VSCode Java項(xiàng)目JDK配置(JDK版本切換不求人)的相關(guān)資料,需要的朋友可以參考下2026-05-05
nacos客戶端一致性hash負(fù)載需求實(shí)現(xiàn)
這篇文章主要介紹了nacos客戶端一致性hash負(fù)載的需求實(shí)現(xiàn)過程及步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02
Java JAR 啟動內(nèi)存參數(shù)配置指南(從基礎(chǔ)設(shè)置到性能優(yōu)化)
在啟動 Java 可執(zhí)行 JAR 文件時(shí),合理配置 JVM 內(nèi)存參數(shù)是保障應(yīng)用穩(wěn)定性和性能的關(guān)鍵,本文將系統(tǒng)講解如何通過命令行參數(shù)、環(huán)境變量等方式指定內(nèi)存配置,并結(jié)合實(shí)際場景提供優(yōu)化建議,感興趣的朋友跟隨小編一起看看吧2025-11-11

