# spring-cloud-dual-track **Repository Path**: learning_project/spring-cloud-dual-track ## Basic Information - **Project Name**: spring-cloud-dual-track - **Description**: Spring Cloud 入门到精通 —— 50 期项目结构总结 - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-18 - **Last Updated**: 2026-07-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring Cloud 入门到精通 —— 50 期项目结构总结 > **版本:** Spring Boot 2.7.18 + Spring Cloud 2021.0.9 + Alibaba 2021.0.5.0 > **JDK:** 8 / 11 > **构建工具:** Maven 3.6+ --- ## 📁 完整项目结构 ``` spring-cloud-dual-track/ ├── pom.xml # 父POM,统一版本管理(9个子模块) │ ├── cloud-common/ # 【公共模块】 │ ├── pom.xml │ └── src/main/java/com/example/common/ │ ├── R.java # 统一API响应:{code, message, data} │ ├── User.java # 用户DTO │ ├── Order.java # 订单DTO │ └── Product.java # 商品库存DTO(秒杀/下单场景) │ ├── stage1-basics/ # ❶ 阶段一:微服务基础 (第1-6期) 🅰️ Nacos │ ├── pom.xml │ ├── cloud-provider/ # 服务提供者(Nacos注册、Nacos Config) │ │ ├── pom.xml │ │ └── src/main/ │ │ ├── resources/ │ │ │ ├── bootstrap.yml # Nacos Config 引导配置 │ │ │ └── application.yml │ │ └── java/com/example/provider/ │ │ ├── ProviderApplication.java # 启动类:@EnableDiscoveryClient │ │ ├── issue2/HelloController.java # 第2期:Hello验证+多实例端口 │ │ ├── issue3/UserController.java # 第3期:用户CRUD接口 │ │ ├── issue3/OrderController.java # 第3期:订单CRUD接口 │ │ └── issue4/ConfigController.java # 第4期:@RefreshScope动态刷新 │ │ │ └── cloud-consumer/ # 服务消费者(Feign + LoadBalancer) │ ├── pom.xml │ └── src/main/ │ ├── resources/application.yml │ └── java/com/example/consumer/ │ ├── ConsumerApplication.java # 启动类:@EnableFeignClients │ ├── issue3/DiscoveryClientController.java # 第3期:DiscoveryClient方式 │ ├── issue3/RestTemplateConfig.java # 第3期:@LoadBalanced │ ├── issue5/UserClient.java # 第5期:Feign用户客户端 │ ├── issue5/OrderClient.java # 第5期:Feign订单客户端 │ ├── issue5/FeignConsumerController.java # 第5期:Feign消费对比 │ ├── issue6/LoadBalancerConfig.java # 第6期:自定义随机策略 │ └── issue6/LoadBalancerTestController.java # 第6期:负载均衡验证 │ ├── stage2-communication/ # ❷ 阶段二:服务通信进阶 (第7-12期) │ ├── pom.xml │ ├── cloud-consumer-advanced/ # 进阶消费者 │ │ ├── pom.xml │ │ └── src/main/ │ │ ├── resources/application.yml # Feign超时+Admin Client配置 │ │ └── java/com/example/consumer/advanced/ │ │ ├── ConsumerAdvancedApplication.java │ │ ├── issue7/UserClientAdvanced.java # 第7期:生产级Feign Client │ │ ├── issue7/FeignInterceptorConfig.java # 第7期:Token/TraceId/版本号注入 │ │ ├── issue7/FeignRetryConfig.java # 第7期:自定义重试策略(3次) │ │ ├── issue7/FeignAdvancedController.java # 第7期:超时/重试验证 │ │ ├── issue9/BusinessException.java # 第9期:统一业务异常 │ │ ├── issue9/GlobalExceptionHandler.java # 第9期:@RestControllerAdvice │ │ ├── issue9/FeignErrorDecoder.java # 第9期:区分4xx/5xx错误 │ │ ├── issue9/UserClientWithFallback.java # 第9期:fallback=降级类 │ │ ├── issue9/UserClientFallback.java # 第9期:兜底数据实现 │ │ └── issue9/ErrorHandlingController.java # 第9期:异常处理验证 │ │ │ └── cloud-admin-server/ # Spring Boot Admin 监控 (第11期) │ ├── pom.xml │ └── src/main/ │ ├── resources/application.yml │ └── java/com/example/admin/ │ └── AdminServerApplication.java # 第11期:@EnableAdminServer │ ├── stage3-gateway-security/ # ❸ 阶段三:网关与安全 (第13-18期) │ ├── pom.xml │ ├── cloud-gateway/ # API 网关 (第13-15期) │ │ ├── pom.xml # Gateway基于WebFlux │ │ └── src/main/ │ │ ├── resources/application.yml # 路由配置+全局CORS │ │ └── java/com/example/gateway/ │ │ ├── GatewayApplication.java # 第13期:路由转发 │ │ ├── issue14/AuthGlobalFilter.java # 第14期:全局鉴权+Token校验 │ │ ├── issue14/RequestLogFilter.java # 第14期:请求耗时+IP日志 │ │ ├── issue14/CorsConfig.java # 第14期:统一跨域处理 │ │ └── issue15/RateLimiterConfig.java # 第15期:IP/用户/接口限流 │ │ │ ├── cloud-auth-satoken/ # Sa-Token 鉴权服务 (第16期) │ │ ├── pom.xml │ │ └── src/main/ │ │ ├── resources/application.yml # Sa-Token Redis配置 │ │ └── java/com/example/auth/satoken/ │ │ ├── SaTokenAuthApplication.java │ │ ├── issue16/SaTokenAuthController.java # 第16期:登录/权限/登出 │ │ └── issue16/SaTokenInterceptorConfig.java # 第16期:路径拦截配置 │ │ │ └── cloud-oauth2-server/ # OAuth2.0 认证服务器 (第17期) │ ├── pom.xml │ └── src/main/java/com/example/auth/oauth2/ │ ├── OAuth2ServerApplication.java │ └── issue17/OAuth2SecurityConfig.java # 第17期:BCrypt+JWT │ ├── stage4-eureka/ # ❹ 阶段四:Eureka 对比 (第19-24期) 🅱️ Eureka │ ├── pom.xml │ ├── cloud-eureka-server/ # Eureka 注册中心 (第19期) │ │ ├── pom.xml │ │ └── src/main/ │ │ ├── resources/application.yml # 自我保护+清理间隔 │ │ └── java/com/example/eureka/ │ │ └── EurekaServerApplication.java # 第19期:@EnableEurekaServer │ │ │ ├── cloud-config-server/ # Spring Cloud Config (第21期) │ │ ├── pom.xml │ │ └── src/main/ │ │ ├── resources/application.yml # Git后端+Native模式 │ │ └── java/com/example/config/ │ │ └── ConfigServerApplication.java # 第21期:@EnableConfigServer │ │ │ ├── cloud-provider-eureka/ # Eureka Provider (第22期) │ │ ├── pom.xml │ │ └── src/main/ │ │ ├── resources/application.yml │ │ └── java/com/example/provider/eureka/ │ │ ├── EurekaProviderApplication.java │ │ └── issue22/EurekaUserController.java # 第22期:同Nacos接口代码 │ │ │ └── cloud-consumer-eureka/ # Eureka Consumer (第22期) │ ├── pom.xml │ └── src/main/ │ ├── resources/application.yml │ └── java/com/example/consumer/eureka/ │ ├── EurekaConsumerApplication.java │ ├── issue22/EurekaUserClient.java # 第22期:Feign完全相同 │ └── issue22/EurekaConsumerController.java # 第22期:对比验证 │ ├── stage5-fault-tolerance/ # ❺ 阶段五:服务容错保护 (第25-30期) │ ├── pom.xml # Sentinel + Resilience4j │ └── src/main/java/com/example/fault/ │ ├── FaultToleranceApplication.java │ ├── issue25/SimpleCircuitBreaker.java # 第25期:手写熔断器状态机 │ ├── issue26/SentinelDemoController.java # 第26期:Sentinel流控+热点限流 │ └── issue27/Resilience4jDemoController.java # 第27期:@CircuitBreaker注解 │ ├── stage6-observability/ # ❻ 阶段六:分布式可观测性 (第31-36期) │ ├── pom.xml # Micrometer Tracing + Zipkin │ └── src/main/java/com/example/observability/ │ ├── ObservabilityApplication.java │ ├── issue31/TracingDemoController.java # 第31期:TraceId/SpanId追踪 │ └── issue35/SecurityDemoController.java # 第35期:防刷+API签名+防重放 │ ├── stage7-distributed/ # ❼ 阶段七:分布式核心进阶 (第37-44期) │ ├── pom.xml # Seata + Stream + Redisson │ └── src/main/ │ ├── resources/application.yml # Seata+MQ+Redis全配置 │ └── java/com/example/distributed/ │ ├── issue38/SeataOrderService.java # 第38期:@GlobalTransactional │ ├── issue40/MessageStreamDemo.java # 第40/41期:Stream消息驱动 │ └── issue42/RedissonLockDemo.java # 第42期:分布式锁+雪花算法 │ └── stage8-production/ # ❽ 阶段八:生产落地实战 (第45-50期) ├── pom.xml ├── Dockerfile # 第45期:JVM优化+优雅关机 ├── docker-compose-nacos.yml # 第45期:Nacos全套编排 ├── docker-compose-eureka.yml # 第45期:Eureka全套编排 └── src/main/ ├── resources/application.yml └── java/com/example/production/ ├── ProductionApplication.java └── issue48/SeckillSystem.java # 第48期:秒杀+Redis Lua防超卖 ``` --- ## 📊 统计概览 | 指标 | 数量 | |:---|:---| | **总子模块数** | 17 个 | | **文件总数** | 95 个 | | **Java 源文件** | 58 个 | | **Maven POM** | 21 个 | | **YAML 配置** | 15 个 | | **Docker 文件** | 1 (Dockerfile) + 2 (compose) | | **覆盖期数** | 50 期(完整覆盖) | | **双轨路线** | 🅰️ Nacos + 🅱️ Eureka | --- ## 🔧 八大学习阶段 | 阶段 | 模块 | 对应期数 | 核心主题 | 技术路线 | |:---|:---|:---|:---|:---| | ❶ | `stage1-basics` | 1-6 期 | Nacos 注册+配置、Feign 声明式调用、LoadBalancer 负载均衡 | 🅰️ Nacos 主线 | | ❷ | `stage2-communication` | 7-12 期 | Feign 生产级配置、全链路追踪、异常处理、Spring Boot Admin 监控 | 🅰️ 通用 | | ❸ | `stage3-gateway-security` | 13-18 期 | Gateway 路由/过滤器/限流、Sa-Token 鉴权、OAuth2.0 认证 | 🅰️ 通用 | | ❹ | `stage4-eureka` | 19-24 期 | Eureka 注册+Config+Bus、双环境自由切换验证 | 🅱️ Eureka 对比 | | ❺ | `stage5-fault-tolerance` | 25-30 期 | 手写熔断器、Sentinel 流控、Resilience4j 熔断、容错对比 | 🆚 双轨对比 | | ❻ | `stage6-observability` | 31-36 期 | Zipkin 链路追踪、SkyWalking APM、JMeter 压测、微服务安全 | 通用 | | ❼ | `stage7-distributed` | 37-44 期 | Seata 分布式事务、MQ 消息驱动、分布式锁/ID、分库分表 | 🆚 双轨对比 | | ❽ | `stage8-production` | 45-50 期 | Docker/K8s 部署、CI/CD、秒杀系统、源码分析、面试备战 | 🆚 双轨融合 | --- ## 🗺️ 双轨技术对照表 | 功能域 | 🅰️ Alibaba 路线 | 🅱️ Netflix/原生 路线 | 通用组件 | |:---|:---|:---|:---| | **注册中心** | Nacos (stage1) | Eureka (stage4) | `@EnableDiscoveryClient` | | **配置中心** | Nacos Config (stage1) | Spring Cloud Config + Bus (stage4) | `@RefreshScope` | | **远程调用** | | | OpenFeign (stage1) | | **负载均衡** | | | Spring Cloud LoadBalancer (stage1) | | **API 网关** | | | Spring Cloud Gateway (stage3) | | **熔断降级** | Sentinel (stage5) | Resilience4j (stage5) | | | **链路追踪** | | | Micrometer Tracing + Zipkin (stage6) | | **鉴权** | Sa-Token (stage3) | Spring Security + OAuth2 (stage3) | | | **消息队列** | RocketMQ (stage7) | RabbitMQ + Stream (stage7) | Spring Cloud Stream | | **分布式事务** | Seata AT (stage7) | 可靠消息最终一致性 (stage7) | | | **分布式锁** | | | Redisson (stage7) | | **分布式ID** | | | 雪花算法 (stage7) | --- ## 🚀 快速开始 ### 环境要求 - **JDK**: 8 或 11 - **Maven**: 3.6+ - **Docker Desktop**: 运行中间件(Nacos/Redis/MySQL/RabbitMQ) - **IDE**: IntelliJ IDEA 2021+ ### 启动中间件 ```bash # Nacos Server(注册中心 + 配置中心) docker run -d --name nacos -p 8848:8848 -p 9848:9848 -e MODE=standalone nacos/nacos-server:v2.2.3 # Redis(Sa-Token/限流/分布式锁) docker run -d --name redis -p 6379:6379 redis:7-alpine # Zipkin(链路追踪) docker run -d --name zipkin -p 9411:9411 openzipkin/zipkin ``` ### 编译与运行 ```bash # 进入项目目录 cd spring-cloud-dual-track # 编译所有模块 mvn clean compile # 按阶段顺序启动微服务: # 阶段1:provider + consumer(Nacos环境) cd stage1-basics/cloud-provider && mvn spring-boot:run -Dserver.port=8081 cd stage1-basics/cloud-consumer && mvn spring-boot:run -Dserver.port=8080 # 阶段2:advanced consumer + admin server cd stage2-communication/cloud-consumer-advanced && mvn spring-boot:run cd stage2-communication/cloud-admin-server && mvn spring-boot:run # 阶段3:gateway + auth cd stage3-gateway-security/cloud-gateway && mvn spring-boot:run cd stage3-gateway-security/cloud-auth-satoken && mvn spring-boot:run # 阶段4:Eureka环境(需要Eureka Server先启动) cd stage4-eureka/cloud-eureka-server && mvn spring-boot:run cd stage4-eureka/cloud-provider-eureka && mvn spring-boot:run cd stage4-eureka/cloud-consumer-eureka && mvn spring-boot:run # Docker Compose 一键启动全部(阶段8) cd stage8-production docker-compose -f docker-compose-nacos.yml up -d ``` ### 关键验证链路 ```bash # 🅰️ Nacos 环境完整调用链验证: # 客户端 → Gateway(:80) → consumer(:8080) → Feign → provider(:8081) curl http://localhost/api/consumer/feign/user/1 curl http://localhost/api/provider/user/1 # 🅱️ Eureka 环境完整调用链验证: # consumer-eureka(:8180) → Feign → provider-eureka(:8181) curl http://localhost:8180/eureka/user/1 # 链路追踪验证: curl http://localhost:9098/tracing/test # 访问 Zipkin http://localhost:9411 搜索 TraceId 查看完整调用链 # 秒杀系统验证(阶段8): curl -X POST "http://localhost:9099/seckill/init-stock?productId=1001&stock=100" curl -X POST "http://localhost:9099/seckill/buy?userId=1&productId=1001" ``` --- ## 💡 代码特点 - **详细中文注释**:每个类和关键方法都有中文注释,说明作用和技术原理 - **Nacos vs Eureka 对比式编写**:阶段1用 Nacos 建立知识体系,阶段4用 Eureka 实现同样功能,代码复用率90%+ - **可独立运行**:每个 stage 都是独立可运行的 Spring Boot 应用 - **生产级实践**:包含 Feign 生产配置、异常处理、Gateway 过滤器、Redis Lua 防超卖等实战代码 - **双轨对照表**:关键位置标注了 🅰️ Alibaba 路线 和 🅱️ Netflix 路线 的技术差异 - **循序渐进**:每个阶段在上一阶段基础上增强,从 Hello World 到秒杀系统 --- *生成时间:2026-07-18*