基于 Nacos 的 SpringCloud+Dubbo 融合架构:RPC 调用、配置管理与共享优化实践、提供微服务之间相互调用的极高性能 性能优化 微服务调用
介绍
Nacos 是阿里巴巴开源的动态服务发现、配置管理和服务共享平台,天生适配微服务架构,兼具注册中心与配置中心两大核心能力,支持配置热更新、多环境隔离、配置共享,是 Spring Cloud 生态的标准组件之一。
Dubbo 是一款高性能、轻量级的Java RPC 远程服务调用框架,专注于微服务间的透明化通信,提供服务注册发现、负载均衡、流量管控、服务治理等企业级能力,是国内分布式系统中应用最广泛的 RPC 框架。
Dubbo
RPC 框架,专注服务间高性能、透明化远程方法调用。
统一注册中心(服务注册 / 发现)+配置中心(配置集中管理、共享、热更新)。
像调用本地方法一样调用远程服务,底层屏蔽网络细节。
OpenFeign
声明式 HTTP 客户端,基于 Spring Cloud 生态,简化 RESTful 服务调用。
依赖 Nacos/Eureka 等做服务发现,自身无注册能力。
通过注解定义接口,自动生成 HTTP 请求,面向资源(REST)调用。
两者区别
Dubbo 上手复杂,约束多、配置繁琐,排错成本高,但好在性能强;
OpenFeign 简单易用,基于 HTTP,学习成本极低,但性能较差,高并发不友好。
Nacos配置文件共享

redis.yaml
spring:
# Redis 配置
redis:
# Redis服务器地址
host: 172.23.4.131
# Redis端口
port: 6379
# Redis密码(无密码则注释/空字符串)
password: 123456
# Redis数据库索引(默认0)
database: 0
# 连接超时时间
timeout: 10s
# lettuce 连接池配置
lettuce:
pool:
# 最大连接数
max-active: 8
# 最大空闲连接
max-idle: 8
# 最小空闲连接
min-idle: 2
# 连接等待时间(-1无限制)
max-wait: -1ms
dubbo.yaml
dubbo:
application:
name: ${spring.application.name}
protocol:
name: dubbo # 通信协议
port: -1 # 端口自动分配(避免冲突)
registry:
address: nacos://172.23.4.131:8848 # Nacos 注册中心地址
parameters:
username: nacos
password: 123456
scan:
base-packages: com.dubbo.**.service.impl # 扫描 Dubbo 服务实现类的包
项目结构
dubbo-demo/
├── pom.xml # 父工程:统一版本、依赖管理
├── dubbo-common/ # 通用工具模块:全局异常、工具类、配置、常量
├── dubbo-api/ # 公共接口模块:RPC接口、DTO、枚举
├── dubbo-provider/ # 服务提供者:接口实现、数据库、Redis
└── dubbo-consumer/ # 服务消费者:Controller、调用RPC服务
└── dubbo-entity/ # 实体类
父模块依赖管理
pom.xml (父模块)
<!-- ===================== Spring Boot 父依赖 ===================== -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.15</version>
<relativePath/>
</parent>
<!-- ===================== 全局版本号统一管理 ===================== -->
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<!-- 第三方工具版本 -->
<fastjson2.version>2.0.53</fastjson2.version>
<!-- Spring Cloud Alibaba & Cloud 版本(Spring Boot 2.6.x 兼容版) -->
<cloud-alibaba.version>2021.1</cloud-alibaba.version>
<spring-cloud.version>2021.0.5</spring-cloud.version>
</properties>
<!-- ===================== 版本锁定:只声明不依赖 ===================== -->
<!-- 作用:子模块引入时无需写版本号,统一管理 -->
<dependencyManagement>
<dependencies>
<!-- Spring Cloud Alibaba 版本(Nacos + Dubbo 依赖) -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud 版本 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- fastjson2 工具包 -->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>${fastjson2.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
定义公共实体类模块API
dubbo-api
public interface IHelloDubboService {
/**
* 简单问候服务接口
* @param name 用户名
* @return 远程调用返回的问候结果
*/
String sayHello(String name);
}
所有的实体类和接口都存放到这个模块当中
Nacos服务注册

生产者提供服务
dubbo-provider
依赖
<?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>
<!-- 继承父工程:统一版本管理、SpringBoot、SpringCloud -->
<parent>
<groupId>org.dubbo.test</groupId>
<artifactId>dubbo-test</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<!-- 当前支付服务模块信息 -->
<groupId>com.dubbo.payment</groupId>
<artifactId>payment-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>payment-service</name>
<description>支付服务:提供支付相关的接口与实现</description>
<!-- 版本定义 -->
<properties>
<dubbo.version>3.0.9</dubbo.version>
<nacos-client.version>2.0.4</nacos-client.version>
</properties>
<dependencies>
<!-- 公共工具模块:全局工具类、配置、通用常量 -->
<dependency>
<groupId>com.common</groupId>
<artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 公共实体模块:DTO、实体类、枚举 -->
<dependency>
<groupId>org.dubbo.entiry</groupId>
<artifactId>entiry</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<!-- Dubbo SpringBoot Starter:Dubbo 核心启动器 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- Dubbo 注册中心适配:对接 Nacos 注册中心 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- Nacos 客户端:服务注册与发现底层依赖 -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos-client.version}</version>
</dependency>
<!-- Nacos 配置中心:统一管理配置文件 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 用于加载 bootstrap.yaml 配置文件 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
</project>
本地配置文件 application.yaml
server:
port: 8081
配置文件共享bootstrap.yaml
spring:
application:
name: dubbo-provider-demo
cloud:
nacos:
server-addr: 172.23.4.131:8848 #注册中心
username: nacos # 你的Nacos账号
password: 123456 # 你的Nacos密码
config:
file-extension: yaml #nacos上选择的格式
shared-configs: #共享配置
- data-id: redis.yaml #redis配置
- data-id: dubbo.yaml #dubbo配置
生产者接口具体实现
@DubboService()
public class HelloDubboServiceImpl implements IHelloDubboService {
@Override
public String sayHello(String name) {
return "调用成功!!";
}
}
服务消费者
依赖
<dependencies>
<!-- SpringBoot Web 核心:提供Web服务、MVC功能 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Dubbo Spring Boot 整合 Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- Dubbo Nacos 注册中心适配 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!-- Nacos Client -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos-client.version}</version>
</dependency>
<dependency>
<groupId>org.dubbo.entiry</groupId>
<artifactId>entiry</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<!-- Nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--用于加载 bootstrap 配置 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!--nacos 服务的注册发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
本地配置文件application.yaml
server:
port: 8080
配置文件共享bootstrap.yaml
spring:
application:
name: dubbo-consumer-demo
cloud:
nacos:
server-addr: 172.23.4.131:8848 #注册中心
username: nacos # 你的Nacos账号
password: 123456 # 你的Nacos密码
config:
file-extension: yaml #nacos上选择的格式
shared-configs: #共享配置
- data-id: redis.yaml
- data-id: dubbo.yaml
服务调用
@RestController
@RequestMapping("/user")
public class UserInfoController {
@DubboReference()
private IHelloDubboService dubboService;
@GetMapping
public String test(){
return dubboService.sayHello("您好");
}
}
返回结果
调用成功!!
服务的版本控制
提供者接口
public interface UserService {
String getUserInfo();
}
服务实现
@DubboService(version = "1.0.0")
public class UserServiceImplV1 implements UserService {
@Override
public String getUserInfo() {
return "我是 V1.0.0 版本的用户信息";
}
}
服务调用
@DubboReference(version = "1.0.0")
private UserService userServiceV1;
@GetMapping("/v1")
public String testV1() {
return userServiceV1.getUserInfo();
}
超时与重试
超时配置
@DubboService(timeout = 3000)
public class HelloDubboServiceImpl implements IHelloDubboService {
@Override
public String sayHello(String name) {
return "调用成功!!";
}
}
或
@RestController
@RequestMapping("/user")
public class UserInfoController {
@DubboReference(timeout = 3000)
private IHelloDubboService dubboService;
@GetMapping
public String test(){
return dubboService.sayHello("您好");
}
}
以上两种超时方式二选一
重试
@DubboService(timeout = 3000,retries = 3)
public class HelloDubboServiceImpl implements IHelloDubboService {
@Override
public String sayHello(String name) {
return "调用成功!!";
}
}
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)