简单介绍Spring Cloud Alibaba 微服务项目的开发流程
项目概述
本项目是一个基于 Spring Cloud Alibaba 技术栈构建的微服务架构示例项目,实现了简历自动投递系统的核心功能。项目采用 Nacos 作为服务注册与配置中心,Dubbo 作为 RPC 框架,Sentinel 实现服务熔断与限流。
技术栈
核心框架
- JDK: 17
- Spring Boot: 2.7.6
- Spring Cloud: 2021.0.9
- Spring Cloud Alibaba: 2.2.9.RELEASE
微服务组件
- Nacos: 服务注册与发现、配置中心(集群模式:8848, 8850, 8852)
- Dubbo: 3.2.11 - 高性能 RPC 框架
- Sentinel: 1.8.6 - 流量控制、熔断降级
- MySQL: 数据持久化
- Spring Data JPA: ORM 框架
其他依赖
- Lombok: 简化 Java 代码
- Spring Boot Actuator: 应用监控
- JAXB: JDK 17 兼容性依赖
项目结构
weh-resume-nacos/
├── weh-service-common/ # 公共模块
│ └── src/main/java/com/weh/resume/pojo/
│ ├── Result.java # 统一返回结果封装
│ └── Resume.java # 简历实体类
├── weh-service-dubbo-api/ # Dubbo 服务接口定义
│ └── src/main/java/com/weh/resume/service/
│ └── ResumeService.java # 简历服务接口
├── weh-service-resume-8081/ # 简历服务提供者(实例1)
│ └── src/main/java/com/weh/resume/
│ ├── dao/ResumeDao.java # 数据访问层
│ ├── service/impl/ # 服务实现
│ └── ServiceResumeApplication8081.java
├── weh-service-resume-8082/ # 简历服务提供者(实例2)
│ └── src/main/java/com/weh/resume/
│ ├── dao/ResumeDao.java
│ ├── service/impl/
│ └── ServiceResumeApplication8082.java
└── weh-service-autodeliver-8090/ # 自动投递服务消费者
└── src/main/java/com/weh/resume/
├── controller/ # 控制器层
│ ├── AutodeliverController.java
│ ├── ConfigTestController.java
│ └── UserController.java
├── config/
│ └── SentinelHandlerClass.java # Sentinel 异常处理
├── enums/
│ └── StatusCodeEnum.java # 状态码枚举
├── exception/
│ ├── ControllerAdviceHandler.java
│ └── MyCustomException.java
└── AutodeliverApplication8090.java
模块说明
1. weh-service-common(公共模块)
职责: 提供公共实体类和工具类
核心类:
Result<T>: 统一返回结果封装类// 成功响应 Result.success(data) Result.success("操作成功", data) // 失败响应 Result.error("操作失败") Result.error(500, "系统错误")
2. weh-service-dubbo-api(服务接口模块)
职责: 定义 Dubbo 服务接口,供服务提供者和消费者依赖
核心接口:
ResumeService: 简历服务接口Integer findDefaultResumeByUserId(Long userId);
3. weh-service-resume-8081/8082(简历服务提供者)
职责: 提供简历数据服务,实现 Dubbo 服务接口
配置要点:
- 端口: 8081 / 8082
- 数据库:
resume_db - Dubbo 协议: dubbo(端口自动分配)
- 服务注册: Nacos
关键配置 (application.yml):
server:
port: 8081
spring:
application:
name: weh-service-resume-nacos
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848,127.0.0.1:8850,127.0.0.1:8852
namespace: af432cc3-7fbe-428c-a1ae-e5427c0bf6c9
datasource:
url: jdbc:mysql://localhost:3306/resume_db
dubbo:
scan:
base-packages: com.weh.resume.service.impl
protocol:
name: dubbo
port: -1 # 自动分配端口
registry:
address: nacos://${spring.cloud.nacos.discovery.server-addr}
4. weh-service-autodeliver-8090(自动投递服务消费者)
职责: 消费简历服务,提供自动投递相关接口
配置要点:
- 端口: 8090
- 服务注册: Nacos
- 配置中心: Nacos Config
- 熔断限流: Sentinel
- RPC 调用: Dubbo
关键配置 (bootstrap.yml):
spring:
application:
name: weh-service-autodeliver-nacos
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848,127.0.0.1:8850,127.0.0.1:8852
namespace: af432cc3-7fbe-428c-a1ae-e5427c0bf6c9
config:
server-addr: 127.0.0.1:8848,127.0.0.1:8850,127.0.0.1:8852
namespace: af432cc3-7fbe-428c-a1ae-e5427c0bf6c9
file-extension: yaml
sentinel:
transport:
dashboard: 127.0.0.1:8080
datasource:
ds1: # 流控规则
nacos:
data-id: ${spring.application.name}-flow-rules
rule-type: flow
ds2: # 降级规则
nacos:
data-id: ${spring.application.name}-degrade-rules
rule-type: degrade
核心功能
1. 服务注册与发现
所有服务启动时自动注册到 Nacos,通过服务名实现服务发现。
启用方式:
@SpringBootApplication
@EnableDiscoveryClient
public class AutodeliverApplication8090 {
public static void main(String[] args) {
SpringApplication.run(AutodeliverApplication8090.class, args);
}
}
2. Dubbo RPC 调用
服务提供者:
@DubboService
public class ResumeServiceImpl implements ResumeService {
@Override
public Integer findDefaultResumeByUserId(Long userId) {
// 业务逻辑
}
}
服务消费者:
@RestController
@RequestMapping("/autodeliver")
public class AutodeliverController {
@DubboReference
private ResumeService resumeService;
@GetMapping("/checkState/{userId}")
public Result<?> findResumeOpenState(@PathVariable Long userId) {
Integer status = resumeService.findDefaultResumeByUserId(userId);
return Result.success(status);
}
}
3. Sentinel 流量控制
配置方式:
@GetMapping("/checkState/{userId}")
@SentinelResource(
value = "findResumeOpenState",
blockHandlerClass = SentinelHandlerClass.class,
blockHandler = "blockHandler",
fallbackClass = SentinelHandlerClass.class,
fallback = "fallbackHandler"
)
public Result<?> findResumeOpenState(@PathVariable Long userId) {
// 业务逻辑
}
异常处理类:
public class SentinelHandlerClass {
// 流控异常处理
public static Result<?> blockHandler(Long userId, BlockException ex) {
return Result.error("请求过于频繁,请稍后再试");
}
// 降级处理
public static Result<?> fallbackHandler(Long userId) {
return Result.error("系统繁忙,请稍后再试");
}
}
Nacos 规则配置示例:
流控规则 (weh-service-autodeliver-nacos-flow-rules):
[
{
"resource": "findResumeOpenState",
"limitApp": "default",
"grade": 1,
"count": 2,
"strategy": 0,
"controlBehavior": 0
}
]
降级规则 (weh-service-autodeliver-nacos-degrade-rules):
[
{
"resource": "findResumeOpenState",
"grade": 0,
"count": 0.5,
"timeWindow": 10
}
]
4. 配置中心
通过 Nacos Config 实现配置动态管理:
配置文件格式: weh-service-autodeliver-nacos.yaml
Data ID: ${spring.application.name}.${file-extension}
Group: DEFAULT_GROUP
Namespace: af432cc3-7fbe-428c-a1ae-e5427c0bf6c9
快速开始
前置条件
-
安装 Nacos 集群
- 下载 Nacos 2.x 版本
- 配置集群模式(3个节点:8848, 8850, 8852)
- 创建命名空间:
af432cc3-7fbe-428c-a1ae-e5427c0bf6c9
-
安装 MySQL
- 创建数据库:
resume_db - 配置用户名密码:root/123456
- 创建数据库:
-
安装 Sentinel Dashboard
- 下载 Sentinel Dashboard
- 启动端口:8080
启动步骤
-
编译项目
cd weh-resume-nacos mvn clean install -
启动简历服务(提供者)
# 启动实例1 cd weh-service-resume-8081 mvn spring-boot:run # 启动实例2 cd weh-service-resume-8082 mvn spring-boot:run -
启动自动投递服务(消费者)
cd weh-service-autodeliver-8090 mvn spring-boot:run -
验证服务
- 访问 Nacos 控制台:http://localhost:8848/nacos
- 查看服务列表,确认服务已注册
- 访问 Sentinel 控制台:http://localhost:8080
- 查看服务监控
测试接口
查询简历状态:
GET http://localhost:8090/autodeliver/checkState/{userId}
响应示例:
{
"code": 200,
"msg": "操作成功",
"data": 1
}
配置说明
Nacos 配置中心
命名空间 ID: af432cc3-7fbe-428c-a1ae-e5427c0bf6c9
配置文件列表:
weh-service-autodeliver-nacos.yaml- 自动投递服务配置weh-service-autodeliver-nacos-flow-rules- 流控规则weh-service-autodeliver-nacos-degrade-rules- 降级规则
Sentinel 规则配置
流控规则参数说明:
resource: 资源名称grade: 限流阈值类型(0-线程数,1-QPS)count: 限流阈值strategy: 流控策略(0-直接,1-关联,2-链路)controlBehavior: 流控效果(0-快速失败,1-Warm Up,2-排队等待)
降级规则参数说明:
resource: 资源名称grade: 熔断策略(0-慢调用比例,1-异常比例,2-异常数)count: 阈值timeWindow: 熔断时长(秒)
Actuator 监控端点
暴露端点: management.endpoints.web.exposure.include=*
常用端点:
/actuator/health- 健康检查/actuator/info- 应用信息/actuator/metrics- 指标信息
部署说明
Docker 部署
构建镜像:
FROM openjdk:17-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
构建命令:
mvn clean package
docker build -t weh-resume-service:latest .
生产环境配置建议
- Nacos 集群: 至少3个节点,保证高可用
- 数据库: 主从复制,读写分离
- Sentinel: 生产环境建议使用持久化存储规则
- 监控: 集成 Prometheus + Grafana
- 日志: 统一日志收集(ELK)
常见问题
1. Nacos 连接失败
问题: 服务无法注册到 Nacos
解决方案:
- 检查 Nacos 服务是否启动
- 确认命名空间 ID 是否正确
- 检查网络连接和防火墙配置
2. Dubbo 服务调用失败
问题: 消费者无法调用提供者服务
解决方案:
- 确认服务提供者已启动并注册
- 检查 Dubbo 扫描包路径配置
- 查看 Nacos 控制台服务列表
3. Sentinel 规则不生效
问题: 配置的流控规则未生效
解决方案:
- 确认 Sentinel Dashboard 已启动
- 检查 Nacos 配置文件格式是否正确
- 确认资源名称与
@SentinelResourcevalue 一致
4. 配置中心无法读取
问题: 应用启动时无法从 Nacos 读取配置
解决方案:
- 确认
bootstrap.yml配置正确 - 检查 Data ID 和 Group 是否匹配
- 确认命名空间 ID 正确
架构优势
- 服务治理: Nacos 提供完整的服务注册与发现机制
- 配置管理: 配置中心实现配置动态更新
- 流量控制: Sentinel 保护服务稳定性
- 高性能 RPC: Dubbo 提供高效的远程调用
- 高可用: 集群部署保证服务可用性
- 可扩展: 微服务架构便于水平扩展
技术选型理由
| 技术 | 选型理由 |
|---|---|
| Nacos | 同时支持服务注册与配置管理,简化架构 |
| Dubbo | 高性能 RPC 框架,适合大规模微服务调用 |
| Sentinel | 阿里开源流量防卫组件,与 Spring Cloud Alibaba 集成度高 |
| Spring Data JPA | 简化数据访问层开发,提高开发效率 |
| Spring Boot 2.7.6 | 稳定版本,与 Spring Cloud Alibaba 兼容性好 |
版本兼容性
| 组件 | 版本 | 说明 |
|---|---|---|
| Spring Boot | 2.7.6 | 基础框架 |
| Spring Cloud | 2021.0.9 | 与 Spring Boot 2.7.x 配套 |
| Spring Cloud Alibaba | 2.2.9.RELEASE | 与 Spring Cloud 2021.x 配套 |
| JDK | 17 | LTS 版本 |
| Dubbo | 3.2.11 | 最新稳定版 |
| Sentinel | 1.8.6 | 与 Dubbo 3.x 兼容 |
开发规范
代码规范
-
包结构规范:
controller: 控制器层service: 业务逻辑层dao: 数据访问层pojo: 实体类config: 配置类exception: 异常处理
-
命名规范:
- 类名使用大驼峰命名法
- 方法名使用小驼峰命名法
- 常量使用全大写下划线分隔
-
注释规范:
- 类注释包含作者、版本、描述、日期
- 方法注释说明功能、参数、返回值
Git 提交规范
feat: 新功能
fix: 修复 bug
docs: 文档更新
style: 代码格式调整
refactor: 重构
test: 测试相关
chore: 构建/工具链相关
5750



被折叠的 条评论
为什么被折叠?



