基于Spring Boot 3.3 + Spring Cloud 2023 + Eureka的微服务架构实现。
micro1/
├── pom.xml # 父工程Maven配置
├── common/ # 公共模块
│ ├── src/main/java/com/blm/common/
│ │ ├── result/ # 统一返回结果封装
│ │ ├── entity/ # 公共实体类
│ │ ├── vo/ # 视图对象
│ │ ├── dto/ # 数据传输对象
│ │ ├── util/ # 工具类 (JWT等)
│ │ ├── feign/ # Feign客户端接口
│ │ └── exception/ # 异常处理
├── eureka-server/ # Eureka注册中心
├── api-gateway/ # API网关
├── auth-center/ # 认证中心
├── user-service/ # 用户服务
└── db/ # 数据库脚本
└── init-microservices.sql
职责: 服务注册与发现
- 端口: 8761
- 主要功能:
- 服务注册
- 服务发现
- 健康检查
- 服务实例管理
- 通用的实体类、工具类、常量等
- 统一返回结果封装
- JWT工具类
- Feign客户端接口
- 异常处理
职责: 统一入口、路由转发、认证鉴权、限流熔断
- 端口: 8080
- 主要功能:
- 请求路由转发
- JWT认证过滤
- 跨域处理
- 负载均衡
职责: 统一认证、Token管理
- 端口: 8082
- 主要功能:
- 用户登录认证
- JWT Token生成和验证
- Token刷新
- 用户登出
职责: 用户注册、信息管理、地址管理
- 数据库: user_db
- 端口: 8081
- 主要功能:
- 用户注册 (
POST /api/users/register) - 用户信息管理 (
GET/PUT /api/users/profile) - 用户地址管理 (
/api/users/addresses)
- 用户注册 (
- 基础框架: Spring Boot 3.3.3
- 微服务: Spring Cloud 2023.0.3
- 服务注册与发现: Eureka
- API网关: Spring Cloud Gateway
- 服务调用: OpenFeign + LoadBalancer
- 数据库: MySQL 8.0
- ORM: MyBatis + PageHelper
- 缓存: Redis
- 认证: JWT + Spring Security
- 文档: SpringDoc OpenAPI 3
- 工具: Lombok
- JDK 21
- MySQL 8.0+
- Redis 6.0+
mysql -u root -p < db/init-microservices.sql# 启动基础服务(Eureka + 认证 + 网关 + 用户服务)
start-eureka-services.bat
# 或启动全部服务
start-all-eureka-services.bat按以下顺序启动各个服务:
- 启动Eureka注册中心
cd eureka-server
mvn spring-boot:run- 启动认证中心
cd auth-center
mvn spring-boot:run- 启动API网关
cd api-gateway
mvn spring-boot:run- 启动用户服务
cd user-service
mvn spring-boot:run- Eureka控制台: http://localhost:8761
- API网关: http://localhost:8080
- Swagger UI: http://localhost:8080/swagger-ui.html
按以下顺序启动各个服务:
- 启动用户服务
cd user-service
mvn spring-boot:run- 启动认证中心
cd auth-center
mvn spring-boot:run- 启动API网关
cd api-gateway
mvn spring-boot:run- API网关: http://localhost:8080
- 认证中心: http://localhost:8082
- 用户服务: http://localhost:8081
各服务的API文档地址:
通过网关访问:
所有服务都使用Nacos作为服务注册与发现中心,命名空间为 blm-microservices。
- 访问Token有效期: 2小时
- 刷新Token有效期: 7天
- 密钥可在各服务的
application.yml中配置
- API网关使用 database 0
- 认证中心使用 database 1
- 用户服务使用 database 2
使用OpenFeign进行服务间调用,Feign客户端接口统一放在 common 模块中:
@FeignClient(name = "user-service", path = "/api/users")
public interface UserServiceClient {
@GetMapping("/{userId}")
Result<UserVO> getUserById(@PathVariable("userId") Long userId);
}- 用户通过API网关访问认证中心进行登录
- 认证中心调用用户服务验证用户信息
- 认证成功后生成JWT Token返回
- 后续请求携带Token通过API网关
- API网关验证Token有效性并提取用户信息
- 将用户ID添加到请求头转发给后端服务
- 在父工程
pom.xml中添加新模块 - 创建服务模块,继承父工程
- 添加相应的依赖(Nacos、OpenFeign等)
- 在API网关中配置路由规则
- 在
common模块中添加Feign客户端接口
每个微服务拥有独立的数据库,实现数据隔离:
user_db: 用户相关数据store_db: 商家相关数据(待实现)order_db: 订单相关数据(待实现)rider_db: 骑手相关数据(待实现)
- 服务启动顺序:确保Nacos先启动,然后按依赖关系启动各服务
- 数据库连接:确保各服务能连接到对应的数据库
- Redis连接:确保Redis服务正常运行
- 端口冲突:确保各服务端口不冲突
- JWT密钥:生产环境请修改JWT密钥
- 实现商家服务 (store-service)
- 实现订单服务 (order-service)
- 实现骑手服务 (rider-service)
- 实现管理后台服务 (admin-service)
- 添加消息队列 (RabbitMQ/RocketMQ)
- 添加分布式事务处理
- 添加服务监控 (Micrometer + Prometheus)
- 添加链路追踪 (Zipkin/Jaeger)
- 容器化部署 (Docker + Kubernetes)