Skip to content

Repository files navigation

PracticeFirst - 微服务项目

项目概述

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

各服务功能说明

1. Gateway - API 网关(端口 21000

  • 基于 Spring Cloud Gateway 实现统一入口
  • 集成 Nacos 服务发现,通过 lb:// 前缀实现负载均衡路由
  • 路由规则:
    • /user/** → user-server
    • /order/** → order-server
    • /product/** → product-server
    • /inventory/** → inventory-server
    • /credit/** → credit-server
  • 集成 Sentinel 流量控制
  • 集成 Prometheus 指标暴露
  • 自定义 RequestLoggingFilter 请求日志记录

2. UserServer - 用户服务(端口 21001

  • 用户信息管理(CRUD)
  • 数据库表:users
  • Sentinel 流量控制
  • Prometheus 监控

3. ProductServer - 商品服务(端口 21002

  • 商品信息管理(CRUD)
  • 数据库表:products
  • Seata 分布式事务(AT 模式)
  • Sentinel 流量控制
  • Prometheus 监控

4. InventoryServer - 库存服务(端口 21003

  • 库存信息管理(CRUD)
  • 数据库表:inventories
  • Seata 分布式事务(AT 模式)
  • Sentinel 流量控制
  • Prometheus 监控

5. OrderServer - 订单服务(端口 21004)⭐ 核心服务

  • 订单管理(CRUD)
  • 数据库表:orders
  • Seata 分布式事务(AT 模式)- 保证订单创建时的一致性
  • Feign 远程调用 其他服务:
    • 调用 ProductServerClient 获取商品信息
    • 调用 InventoryServerClient 扣减库存
    • 调用 CreditServerClient 增加用户积分
  • Sentinel 熔断降级CreditClientFallbackFactory 处理积分服务不可用的降级逻辑
  • Sentinel 流量控制
  • Prometheus 监控

6. CreditServer - 积分服务(端口 21005

  • 用户积分/信用分管理(CRUD)
  • 数据库表:points
  • Seata 分布式事务(AT 模式)
  • 通过 Nacos 配置中心动态加载配置(credit-server-business.yaml
  • Sentinel 流量控制
  • Prometheus 监控

7. BaseServer - 公共基础模块(无独立运行)

  • 统一响应封装 Result<T> - 规范各服务返回格式
  • 基础请求封装 BaseRequest
  • 常量定义 Const
  • 工具类 ObjectUtilStringUtil
  • AOP 日志切面 ServiceLogAspect - 自动记录服务层方法调用日志
  • 所有业务服务依赖此模块

8. Generator - MyBatis 代码生成器

  • 基于 MyBatis Generator 自动生成 Mapper、Model 代码
  • 仅用于开发阶段代码生成

配置中心(Nacos)

各服务的配置通过 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.yamlcredit-server-docker.yamlcredit-server-business.yaml

分布式事务(Seata)

在涉及跨服务调用的业务场景(如订单创建)中,以下服务集成 Seata AT 模式

  • 订单服务(OrderServer)- 事务发起者
  • 商品服务(ProductServer)
  • 库存服务(InventoryServer)
  • 积分服务(CreditServer)

Seata 通过 Nacos 注册中心进行协调,事务分组为 default_tx_group

链路追踪(Skywalking)

所有业务服务通过 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

Docker 部署

# 1. 构建项目
mvn clean package -DskipTests

# 2. 一键部署(需先保证 common-net 网络存在以及 Nacos、MySQL 已启动)
docker compose up -d

数据源

所有服务使用统一的 MySQL 数据库连接:

  • 用户名:root
  • 密码:Mysql@mml19980908
  • 初始化建表脚本:primitive_source.sql

About

提交微服务脚手架(spring cloud + nacos + gateway + sentinel + seata + ELK(elasticsearch,filebeat[logstash]+kibana) + prometheus + grafana + skywalking)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages