PracticeFirst 是一个基于 Spring Cloud Alibaba 技术栈构建的微服务电商原型项目。项目采用 Maven 多模块 架构,集成了服务注册与发现、配置中心、网关路由、分布式事务、服务熔断降级、APM 链路追踪和监控等微服务核心基础设施。
| 技术 | 版本 | 用途 |
|---|---|---|
| Java | 17 | 开发语言 |
| Spring Boot | 3.2.2 | 应用框架 |
| Spring Cloud | 2023.0.1 | 微服务治理 |
| Spring Cloud Alibaba | 2023.0.1.0 | 阿里云微服务组件 |
| Spring Cloud Gateway | - | API 网关 |
| Nacos | - | 服务注册中心 & 配置中心 |
| Sentinel | - | 流量控制 & 熔断降级 |
| Seata | - | 分布式事务(AT 模式) |
| MyBatis | 3.5.13 | ORM 持久层 |
| Druid | 1.2.21 | 数据库连接池 |
| MySQL | 8.0.33 | 关系型数据库 |
| Skywalking | - | APM 链路追踪 |
| Prometheus | - | 指标监控 |
| Knife4j / SpringDoc | 4.5.0 / 2.3.0 | API 文档 |
| Feign / OpenFeign | - | 声明式服务调用 |
| PageHelper | - | 分页插件 |
| Hutool | 5.8.16 | 工具类库 |
| Lombok | - | 代码简化 |
PracticeFirst/
├── pom.xml # 根 POM(多模块聚合)
├── docker-compose.yml # Docker 容器编排
├── deploy.sh # 部署脚本
├── generate_docker.py # Docker 配置生成脚本
├── primitive_source.sql # 初始数据库建表 SQL
├── skywalking/ # Skywalking Agent 配置
│
├── BaseServer/ # 公共基础模块(无启动类)
│ └── src/main/java/com/marius/baseserver/
│ ├── aop/ServiceLogAspect.java # 服务调用日志切面
│ ├── common/Const.java # 常量定义
│ ├── request/BaseRequest.java # 基础请求封装
│ ├── response/Result.java # 统一响应结果封装
│ └── util/ # 工具类(ObjectUtil, StringUtil)
│
├── UserServer/ # 用户服务(端口 21001)
│ └── src/main/java/com/marius/userserver/
│ ├── controller/UserController.java # 用户 API
│ ├── service/UserService.java # 用户业务接口
│ ├── service/impl/UserServiceImpl.java
│ ├── mapper/UsersMapper.java # 用户数据访问
│ └── model/Users.java # 用户实体
│
├── ProductServer/ # 商品服务(端口 21002)- 集成 Seata
│ └── src/main/java/com/marius/productserver/
│ ├── controller/ProductController.java # 商品 API
│ ├── service/ProductService.java
│ ├── service/impl/ProductServiceImpl.java
│ ├── mapper/ProductsMapper.java # 商品数据访问
│ └── model/Products.java # 商品实体
│
├── InventoryServer/ # 库存服务(端口 21003)- 集成 Seata
│ └── src/main/java/com/marius/inventoryserver/
│ ├── controller/InventoryController.java # 库存 API
│ ├── service/InventoryService.java
│ ├── service/impl/InventoryServiceImpl.java
│ ├── mapper/InventoriesMapper.java # 库存数据访问
│ └── model/Inventories.java # 库存实体
│
├── OrderServer/ # 订单服务(端口 21004)- 核心业务,集成 Seata
│ └── src/main/java/com/marius/orderserver/
│ ├── controller/OrderController.java # 订单 API
│ ├── service/OrderService.java
│ ├── service/impl/OrderServiceImpl.java
│ ├── mapper/OrdersMapper.java # 订单数据访问
│ ├── model/Orders.java # 订单实体
│ └── feign/ # 远程调用客户端
│ ├── CreditServerClient.java # 调用积分服务
│ ├── InventoryServerClient.java # 调用库存服务
│ ├── ProductServerClient.java # 调用商品服务
│ ├── dto/CreditDTO.java # 积分 DTO
│ ├── dto/InventoryDTO.java # 库存 DTO
│ ├── dto/ProductDTO.java # 商品 DTO
│ └── fallback/CreditClientFallbackFactory.java # Sentinel 降级
│
├── CreditServer/ # 积分服务(端口 21005)- 集成 Seata
│ └── src/main/java/com/marius/creditserver/
│ ├── controller/CreditController.java # 积分 API
│ ├── service/CreditService.java
│ ├── service/impl/CreditServiceImpl.java
│ ├── config/CreditConfig.java # 积分配置
│ ├── mapper/PointsMapper.java # 积分数据访问
│ └── model/Points.java # 积分实体
│
├── Gateway/ # API 网关(端口 21000)
│ └── src/main/java/com/marius/gateway/
│ ├── filter/RequestLoggingFilter.java # 请求日志过滤
│ └── GatewayApplication.java
│
└── Generator/ # MyBatis 代码生成器(工具模块)
└── src/main/java/com/marius/
├── mapper/ # 自动生成的 Mapper
└── model/ # 自动生成的 Model
- 基于 Spring Cloud Gateway 实现统一入口
- 集成 Nacos 服务发现,通过
lb://前缀实现负载均衡路由 - 路由规则:
/user/**→ user-server/order/**→ order-server/product/**→ product-server/inventory/**→ inventory-server/credit/**→ credit-server
- 集成 Sentinel 流量控制
- 集成 Prometheus 指标暴露
- 自定义
RequestLoggingFilter请求日志记录
- 用户信息管理(CRUD)
- 数据库表:
users - Sentinel 流量控制
- Prometheus 监控
- 商品信息管理(CRUD)
- 数据库表:
products - Seata 分布式事务(AT 模式)
- Sentinel 流量控制
- Prometheus 监控
- 库存信息管理(CRUD)
- 数据库表:
inventories - Seata 分布式事务(AT 模式)
- Sentinel 流量控制
- Prometheus 监控
- 订单管理(CRUD)
- 数据库表:
orders - Seata 分布式事务(AT 模式)- 保证订单创建时的一致性
- Feign 远程调用 其他服务:
- 调用
ProductServerClient获取商品信息 - 调用
InventoryServerClient扣减库存 - 调用
CreditServerClient增加用户积分
- 调用
- Sentinel 熔断降级:
CreditClientFallbackFactory处理积分服务不可用的降级逻辑 - Sentinel 流量控制
- Prometheus 监控
- 用户积分/信用分管理(CRUD)
- 数据库表:
points - Seata 分布式事务(AT 模式)
- 通过 Nacos 配置中心动态加载配置(
credit-server-business.yaml) - Sentinel 流量控制
- Prometheus 监控
- 统一响应封装
Result<T>- 规范各服务返回格式 - 基础请求封装
BaseRequest - 常量定义
Const - 工具类
ObjectUtil、StringUtil - AOP 日志切面
ServiceLogAspect- 自动记录服务层方法调用日志 - 所有业务服务依赖此模块
- 基于 MyBatis Generator 自动生成 Mapper、Model 代码
- 仅用于开发阶段代码生成
各服务的配置通过 Nacos Config 进行管理:
| 服务 | Nacos 配置 Data ID |
|---|---|
| Gateway | gateway-server.yaml |
| UserServer | user-server-business.yaml |
| ProductServer | product-server.yaml |
| InventoryServer | inventory-server.yaml |
| OrderServer | order-server.yaml |
| CreditServer | credit-server-base.yaml、credit-server-docker.yaml、credit-server-business.yaml |
在涉及跨服务调用的业务场景(如订单创建)中,以下服务集成 Seata AT 模式:
- 订单服务(OrderServer)- 事务发起者
- 商品服务(ProductServer)
- 库存服务(InventoryServer)
- 积分服务(CreditServer)
Seata 通过 Nacos 注册中心进行协调,事务分组为 default_tx_group。
所有业务服务通过 Docker 部署时挂载 Skywalking Agent,实现全链路 APM 追踪。
| 服务 | 端口 |
|---|---|
| API 网关 (Gateway) | 21000 |
| 用户服务 (UserServer) | 21001 |
| 商品服务 (ProductServer) | 21002 |
| 库存服务 (InventoryServer) | 21003 |
| 订单服务 (OrderServer) | 21004 |
| 积分服务 (CreditServer) | 21005 |
- JDK 17+
- Docker & Docker Compose
- Nacos 服务(服务注册与配置中心)
- MySQL 数据库
- Maven 3.6+
# 1. 构建项目
mvn clean package -DskipTests
# 2. 启动基础中间件(Nacos、MySQL 等需提前启动)
# 3. 按顺序启动各服务
# 推荐启动顺序:UserServer → ProductServer → InventoryServer → CreditServer → OrderServer → Gateway# 1. 构建项目
mvn clean package -DskipTests
# 2. 一键部署(需先保证 common-net 网络存在以及 Nacos、MySQL 已启动)
docker compose up -d所有服务使用统一的 MySQL 数据库连接:
- 用户名:
root - 密码:
Mysql@mml19980908 - 初始化建表脚本:
primitive_source.sql