java后续学习路线
核心结论:学完 SSM/SpringBoot+SpringCloud + 配套中间件,只是掌握了 Java 后端「主流技术栈的核心」,但远不算 “学完了” ——Java 后端的知识体系是 “核心技术 + 业务场景 + 工程化 + 深度进阶” 的组合,核心技术是基础,后续的学习更多是围绕 “如何把技术落地到实际项目、解决生产环境的问题、提升系统性能和稳定性” 展开,而且技术本身也在持续迭代。
简单说:你学的这些是「能上手做项目的基础」,而实际开发 / 求职中,还需要补「工程化能力、场景化落地、深度进阶、业务思维」,下面分 **「不用再从头学的核心」和「需要继续补的内容」** 讲清楚,避免你盲目学,也明确后续学习的重点(贴合求职 / 实际开发)。
一、你已经掌握的:Java 后端「核心技术底座」(不用再从头学,重点是练熟)
你提到的 SSM→SpringBoot→SpringCloud + 配套中间件(Redis / 消息队列 / MySQL 进阶 / Nginx/Docker),已经覆盖了 Java 后端从单体到微服务、从开发到部署的核心技术,这部分是求职 / 做项目的 “敲门砖”,也是后续所有学习的基础,核心要求是 **“能落地、能解决基础问题”**,而非只懂理论:
- 单体开发:能独立用 SpringBoot+MyBatis 做 CRUD、处理事务、实现基础业务;
- 微服务开发:能基于 SpringCloud Alibaba 搭建微服务骨架(Nacos 注册配置 + OpenFeign 远程调用 + Gateway 网关 + Sentinel 熔断)、解决简单的分布式问题(比如分布式锁);
- 中间件使用:能熟练用 Redis 做缓存 / 分布式锁、用 RocketMQ/Kafka 做异步解耦、能做 MySQL 的索引优化 / 简单读写分离、能用 Docker 部署项目;
- 基础部署:能配合 Nginx 做反向代理 / 负载均衡,能把项目部署到服务器。
这部分的核心目标:练熟,能独立做一个「微服务小项目」(比如电商的订单 / 库存 / 用户 / 商品四服务微服务项目),把这些技术串起来用,就达到了「初级 Java 后端开发」的技术要求。
二、需要继续补的内容:分「必补(求职 / 开发刚需)」和「选补(提升竞争力 / 按场景学)」
(一)必补内容:工程化能力 + 生产问题解决(核心是「把代码变成能上线的项目」,面试官重点考察)
这部分是新手和实际开发工程师的核心差距—— 很多人会写 CRUD,但不知道如何让代码 “规范、可维护、能抗住生产环境的高并发、出问题能快速排查”,这部分内容没有新的框架,都是基于你已学技术的「落地技巧和解决方案」,优先级最高:
1. 项目工程化规范(团队开发必备)
- 代码规范:命名规范、包结构规范、接口规范(RESTful)、异常处理规范(统一异常返回)、返回结果规范(统一响应体);
- 开发规范:Git 分支管理(master/develop/feature 分支)、代码提交规范、注释规范;
- 分层设计:严格的 Controller→Service→Mapper 分层,避免业务逻辑写在 Controller,避免 Mapper 层做复杂业务;
- 通用组件:封装项目通用的工具类(日期、加密、字符串)、通用中间件封装(Redis 客户端封装、消息队列生产者消费者封装)、全局异常处理器、全局日志处理。
2. 生产环境常见问题解决方案(核心考点)
这部分是面试高频题,也是实际开发中天天遇到的问题,全部基于你已学的中间件,核心是「知道问题是什么、怎么解决」:
- Redis:缓存穿透 / 击穿 / 雪崩的解决方案、缓存与数据库一致性问题(双写一致 / 失效一致)、Redis 集群入门(主从 / 哨兵 / 集群,解决单点故障);
- MySQL:慢 SQL 优化(执行计划 explain)、索引失效场景、分库分表入门(Sharding-JDBC)、分布式 id 生成(雪花算法 / UUID/Redis 自增,解决分库分表后主键冲突);
- 消息队列:消息丢失 / 重复消费 / 顺序消费的解决方案、消息回溯、死信队列的使用;
- 微服务:服务调用的超时设置、熔断降级的合理配置、接口幂等性(解决重复提交 / 重复消费)、分布式事务的多种方案(Seata / 消息最终一致性 / 本地消息表,按场景选择)。
3. 接口开发进阶(实用能力)
- 接口防刷 / 限流:基于 Redis/Sentinel 实现接口限流,防止恶意请求;
- 接口加密:敏感接口的参数加密 / 返回值加密(比如支付接口);
- 接口文档:用 Swagger/Knife4j 自动生成接口文档,替代手写文档,提升团队协作效率;
- 接口测试:用 PostMan/JMeter 做接口测试,能简单做压力测试(知道接口的并发能力)。
4. 日志与问题排查(开发必备)
- 日志规范:按级别打印日志(info/debug/warn/error)、日志中携带请求 ID(链路追踪)、避免打印敏感信息(密码);
- 日志排查:用 ELK(Elasticsearch+Logstash+Kibana)收集和分析日志,能通过日志定位问题;
- 链路追踪:用 SkyWalking/Pinpoint 做微服务链路追踪,能排查跨服务调用的慢接口 / 报错接口。
(二)选补内容:按场景 / 职业规划进阶(提升竞争力,不用全学,按需选)
这部分内容是在核心技术基础上,针对特定业务场景的技术延伸,不同的公司 / 业务场景要求不同,你可以根据自己的求职方向(比如电商、大数据、中间件开发)选择学习,优先级低于「必补内容」:
1. 容器与云原生(主流趋势,大厂必备)
- 从 Docker 到 K8s:你已学 Docker 基础,后续可学 K8s 入门(Pod/Deployment/Service/Ingress),知道如何用 K8s 管理微服务集群(扩容 / 缩容 / 故障自愈);
- 云服务:了解阿里云 / 腾讯云的基础服务(ECS/Redis/MQ/RDS),能把项目部署到云服务器,使用云原生中间件(比如阿里云的 Nacos/Sentinel)。
2. 大数据 / 中间件进阶(偏技术深度)
- 中间件源码入门:读 Redis/SpringBoot 的核心源码(不用全读,读核心模块,比如 Redis 的跳表、SpringBoot 的自动配置),理解底层实现,面试更有优势;
- 大数据相关:如果想做大数据开发,可学 Flink/Spark 入门,配合 Kafka 做实时数据处理;
- 搜索引擎:深入学 Elasticsearch(聚合查询 / 分词器定制 / 集群部署),应对电商搜索 / 日志检索等场景。
3. 后端高级特性(提升系统设计能力)
- 分布式架构设计:学常见的分布式架构模式(微服务拆分原则、服务网格、中台架构),能简单做系统架构设计;
- 高并发高可用:学限流 / 熔断 / 降级的进阶配置、服务集群部署、异地多活入门,理解如何设计 “抗住高并发、不会单点故障” 的系统;
- 设计模式深度:把 Spring 中的设计模式落地到自己的业务代码中,比如用策略模式处理不同支付方式、用观察者模式处理业务事件、用装饰器模式增强接口功能。
4. 跨端 / 全栈能力(提升综合竞争力)
- 前端基础:学 Vue/React 入门,能独立写简单的前端页面,实现 “前后端分离” 开发;
- 移动端对接:了解 APP / 小程序的接口对接规范(HTTPS、小程序授权);
- 脚本开发:学 Python/Shell 脚本,能写自动化部署脚本 / 数据处理脚本,提升工作效率。
三、关键认知:Java 后端的学习「没有终点,但有重点」
技术的发展永远比学习快,SpringCloud 在迭代、中间件在更新、云原生在普及,但核心的原理和思想永远不变(比如 IOC/AOP、分布式的 CAP 理论、数据库的 ACID、缓存的核心思想),后续的学习不是 “从头学新框架”,而是:
- 练熟基础:把 SSM/SpringBoot/SpringCloud + 中间件的核心用法练到 “不用查文档就能写”,形成肌肉记忆;
- 落地项目:通过做实际的微服务项目(比如电商、外卖、社交),把工程化规范、生产问题解决方案落地,这是最好的学习方式;
- 解决问题:遇到问题再学,比如做电商项目遇到 “缓存与数据库一致性问题”,再去深查解决方案,比盲目看理论更有效;
- 关注原理:学任何技术,先搞懂 “解决什么问题”,再学 “怎么用”,最后再看 “底层原理”,比如学 Redis 集群,先知道 “解决单点故障问题”,再学 “怎么部署”,最后看 “主从复制的原理”。
四、给你的后续学习建议(贴合求职,可落地)
- 先做一个微服务实战项目:用 SpringCloud Alibaba+Redis+RocketMQ+MySQL+Docker 做一个「电商微服务项目」(订单 / 库存 / 用户 / 商品 / 支付 5 个服务即可),严格按工程化规范开发,落地统一异常 / 统一响应 / 接口文档 / 日志规范,把你已学的技术串起来;
- 针对性补生产问题解决方案:以项目中遇到的问题为导向,比如做订单服务遇到 “重复下单”,就学接口幂等性;做商品服务遇到 “缓存热点”,就学缓存击穿的解决方案;
- 刷面试题:重点刷「SpringBoot/SpringCloud/Redis/MySQL/ 消息队列」的面试高频题,尤其是生产问题相关的,比如 “Redis 的缓存穿透怎么解决?”“MySQL 的慢 SQL 怎么优化?”“分布式事务有哪些方案?”;
- 按需进阶:如果想进大厂,补 K8s / 云原生 / 源码阅读;如果想做中小企业开发,补工程化 / 高并发 / 全栈基础,不用贪多。
最后总结
你学完的 SSM/SpringBoot/SpringCloud + 配套中间件,是 Java 后端的 **“核心技术底座”,能让你「上手做项目」;但要成为「能独立开发、能解决生产问题的 Java 后端工程师」,还需要补工程化规范、生产问题解决方案、项目落地能力 **(必补),再根据职业规划选补云原生 / 大数据 / 架构设计(选补)。
Java 后端的学习,“会用” 只是入门,“能用好、能解决问题” 才是核心,而这一切,都需要通过实际项目来落地和验证。
场景,覆盖5 个核心微服务(用户 / 商品 / 订单 / 库存 / 支付),串联 SSM/SpringBoot/SpringCloud Alibaba + 全套中间件,严格遵循工程化规范,同时落地生产环境常见问题解决方案,做完这个项目可直接用于简历项目经历。
电商微服务项目技术落地清单(SpringCloud Alibaba 版)
适配求职 / 实战场景,覆盖5 个核心微服务(用户 / 商品 / 订单 / 库存 / 支付),串联 SSM/SpringBoot/SpringCloud Alibaba + 全套中间件,严格遵循工程化规范,同时落地生产环境常见问题解决方案,做完这个项目可直接用于简历项目经历。
项目基础信息
- 技术栈核心:SpringBoot 2.7.8 + SpringCloud Alibaba 2021.0.5.0
- 核心中间件:Nacos 2.2.0(注册 + 配置)、Redis 7.0(缓存 + 分布式锁)、RocketMQ 5.1.0(消息队列)、MySQL 8.0(数据库)、Sentinel 1.8.6(熔断限流)、Docker(容器化部署)
- 辅助技术:MyBatis-Plus(简化 CRUD)、Knife4j(接口文档)、SkyWalking 9.4.0(链路追踪)、ELK(日志收集,可选)
- 工程化规范:RESTful 接口、统一响应 / 异常、Git 分支管理、日志规范、通用工具类封装
一、项目整体工程结构(先搭骨架,再写业务)
采用父子工程结构,统一管理依赖版本,子工程按微服务拆分,公共代码抽离到通用模块,避免重复开发。
plaintext
e-commerce-microservice(父工程) ├── common-core(通用核心模块,所有微服务依赖) │ ├── 通用实体(BaseEntity、分页实体) │ ├── 统一响应体(Result+ResultCode) │ ├── 统一异常处理(GlobalExceptionHandler) │ ├── 通用工具类(日期、加密、Redis、MQ、JSON) │ ├── 常量类(业务常量、状态码常量) │ ├── 注解(自定义注解,如接口限流、日志注解) ├── user-service(用户微服务:8001) ├── product-service(商品微服务:8002) ├── order-service(订单微服务:8003) ├── stock-service(库存微服务:8004) ├── pay-service(支付微服务:8005) ├── gateway-service(网关微服务:9000,唯一入口) 核心要求
- 父工程仅做依赖版本管理,无业务代码;
- 所有微服务统一引入
common-core,复用通用代码; - 每个微服务独立配置
application.yml,公共配置抽离到 Nacos 配置中心(如数据库连接、Redis 配置)。
二、前置准备(先搭环境,避免开发中踩坑)
1. 中间件环境部署(Docker 一键部署,快速可用)
优先用 Docker 部署所有中间件,保证开发 / 测试环境一致,避免 “本地能跑,服务器不行”,附核心启动命令(直接复制执行):
- Nacos:
docker run -d --name nacos -p 8848:8848 -e MODE=standalone nacos/nacos-server:v2.2.0 - Redis:
docker run -d --name redis -p 6379:6379 --requirepass "123456" redis:7.0 --appendonly yes - RocketMQ:先装 NameServer 再装 Broker(附一键启动脚本,避免手动配置)
- MySQL:
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=e_commerce mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci - Sentinel:
docker run -d --name sentinel -p 8080:8080 bladex/sentinel-dashboard:1.8.6 - SkyWalking:
docker run -d --name skywalking -p 12800:12800 -p 11800:11800 apache/skywalking-oap-server:9.4.0 && docker run -d --name skywalking-ui -p 8081:8080 --link skywalking:oap apache/skywalking-ui:9.4.0
2. 开发工具配置
- IDEA:安装Lombok、MyBatisX、Alibaba Java Coding Guidelines插件(代码规范 + 简化开发);
- Git:配置分支规则(master 主分支、develop 开发分支、feature-xxx 功能分支);
- PostMan:新建项目集合,管理所有接口,支持接口批量测试。
三、通用核心模块(common-core)开发(先写通用,再写业务)
所有微服务的公共代码都抽离到这里,只写一次,处处复用,核心开发内容如下:
1. 统一响应体
解决 “接口返回格式混乱” 问题,所有接口返回统一结构,前端无需适配多种返回格式:
java
运行
// 统一响应结果 @Data @NoArgsConstructor @AllArgsConstructor public class Result<T> { private Integer code; // 状态码:200成功,其他失败 private String msg; // 提示信息 private T data; // 返回数据 // 静态工具方法 public static <T> Result<T> success() { return new Result<>(200, "操作成功", null); } public static <T> Result<T> success(T data) { return new Result<>(200, "操作成功", data); } public static <T> Result<T> fail(String msg) { return new Result<>(500, msg, null); } public static <T> Result<T> fail(Integer code, String msg) { return new Result<>(code, msg, null); } } // 状态码常量 public class ResultCode { public static final Integer SUCCESS = 200; public static final Integer FAIL = 500; public static final Integer PARAM_ERROR = 400; // 参数错误 public static final Integer UNAUTHORIZED = 401; // 未授权 public static final Integer FORBIDDEN = 403; // 禁止访问 } 2. 统一异常处理
解决 “try-catch 遍布代码” 问题,全局捕获所有异常,统一返回异常信息,无需业务代码手动处理异常:
java
运行
@RestControllerAdvice // 全局捕获Controller层异常 public class GlobalExceptionHandler { // 捕获运行时异常 @ExceptionHandler(RuntimeException.class) public Result<?> handleRuntimeException(RuntimeException e) { log.error("运行时异常:", e); return Result.fail(e.getMessage()); } // 捕获自定义业务异常 @ExceptionHandler(BusinessException.class) public Result<?> handleBusinessException(BusinessException e) { log.error("业务异常:", e); return Result.fail(e.getCode(), e.getMessage()); } // 捕获参数校验异常 @ExceptionHandler(MethodArgumentNotValidException.class) public Result<?> handleParamException(MethodArgumentNotValidException e) { String msg = e.getBindingResult().getFieldError().getDefaultMessage(); return Result.fail(ResultCode.PARAM_ERROR, msg); } // 捕获所有未处理异常 @ExceptionHandler(Exception.class) public Result<?> handleException(Exception e) { log.error("系统异常:", e); return Result.fail("系统内部错误,请联系管理员"); } } // 自定义业务异常(业务中主动抛出) @Data @NoArgsConstructor @AllArgsConstructor public class BusinessException extends RuntimeException { private Integer code = ResultCode.FAIL; private String msg; public BusinessException(String msg) { this.msg = msg; } } 3. 通用工具类
封装开发中高频使用的工具,避免重复编写,核心实现:
- DateUtil:日期格式化、日期加减、时间戳转换;
- EncryptUtil:MD5 加密、AES 加密(用于敏感数据,如密码、手机号);
- RedisUtil:基于 RedisTemplate 封装通用操作(set/get/expire/incr/ 分布式锁);
- MQUtil:RocketMQ 生产者 / 消费者通用封装;
- JsonUtil:JSON 序列化 / 反序列化(基于 FastJSON/Jackson);
- IdUtil:分布式 ID 生成(雪花算法,解决分库分表主键冲突)。
4. 通用实体 / 注解
- BaseEntity:所有业务实体的父类,包含公共字段(id、createTime、updateTime、delFlag),用 MyBatis-Plus 自动填充;
- @Log:自定义日志注解,配合 AOP 实现接口日志自动记录(谁在什么时候调用了哪个接口,参数是什么);
- @Limit:自定义限流注解,配合 Redis/Sentinel 实现接口限流。
5. 依赖管理
common-core的pom.xml只引入通用依赖(Lombok、MyBatis-Plus、Redis、MQ、SpringCloud 核心依赖),业务依赖由各个微服务自行引入。
四、各个微服务开发(按 “用户→商品→库存→订单→支付→网关” 顺序开发)
每个微服务的开发流程统一:建表→实体→Mapper→Service→Controller→配置→测试,核心要求:严格分层,禁止跨层调用(如 Controller 直接调用 Mapper),下面按微服务拆分,讲清核心业务、技术点、生产问题解决方案(只讲核心,避免冗余)。
1. 网关微服务(gateway-service:9000)【先开发,作为唯一入口】
所有前端请求都通过网关转发,集中处理路由、鉴权、限流、跨域、日志,业务微服务无需单独处理,核心开发内容:
核心依赖
xml
<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>common-core</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> 核心配置(application.yml)
yaml
server: port: 9000 spring: application: name: gateway-service cloud: nacos: discovery: server-addr: 127.0.0.1:8848 # Nacos注册中心 gateway: routes: # 路由规则:id→服务名→路径匹配→转发地址 - id: user-service uri: lb://user-service # lb=负载均衡,通过服务名转发 predicates: - Path=/user/** # 匹配/user开头的请求 - id: product-service uri: lb://product-service predicates: - Path=/product/** - id: order-service uri: lb://order-service predicates: - Path=/order/** - id: stock-service uri: lb://stock-service predicates: - Path=/stock/** - id: pay-service uri: lb://pay-service predicates: - Path=/pay/** globalcors: # 全局跨域配置 cors-configurations: '[/**]': allowedOrigins: "*" # 允许所有源 allowedMethods: "*" # 允许所有请求方法 allowedHeaders: "*" # 允许所有请求头 sentinel: transport: dashboard: 127.0.0.1:8080 # Sentinel控制台 gateway: enabled: true # 开启Sentinel网关限流 核心功能开发
- 全局跨域:上面配置已实现,无需额外代码;
- Sentinel 网关限流:在 Sentinel 控制台为每个路由配置限流规则(如 QPS=10,每秒最多 10 个请求);
- 接口鉴权:基于 JWT 实现,网关统一校验 token,无效 token 直接拒绝,有效 token 转发到业务服务(后续可扩展);
- 链路追踪:引入 SkyWalking 依赖,网关作为请求入口,自动记录请求轨迹。
2. 用户微服务(user-service:8001)
核心业务
用户注册、登录、信息查询 / 修改、权限管理(简易版,基于角色)。
核心技术点
- 密码加密:用户密码不明文存储,用 MD5 + 盐值加密(盐值随机,避免彩虹表破解);
- Redis 缓存:用户信息缓存(查询用户信息先查 Redis,再查数据库,更新时同步刷新 Redis);
- 接口限流:登录 / 注册接口加 Sentinel 限流(防止恶意刷接口);
- 参数校验:用 JSR380 注解(@NotBlank、@Pattern、@Size)做参数校验,配合全局异常处理返回错误信息;
- JWT 生成:用户登录成功后生成 JWT 令牌,返回给前端,后续请求携带令牌鉴权。
生产问题解决方案
- 用户注册重复:数据库用户名字段加唯一索引,捕获唯一键冲突异常,返回 “用户名已存在”;
- 登录密码错误次数限制:用 Redis 记录用户密码错误次数,超过 5 次锁定 10 分钟(防止暴力破解)。
核心接口(RESTful 规范)
- POST /user/register:用户注册
- POST /user/login:用户登录
- GET /user/info/{id}:查询用户信息
- PUT /user/info:修改用户信息
- GET /user/logout:用户登出(删除 Redis 中的 token)
3. 商品微服务(product-service:8002)
核心业务
商品新增 / 修改 / 删除、商品列表查询、商品详情查询、商品分类管理。
核心技术点
- MyBatis-Plus:实现商品 CRUD,无需手写 SQL,配合分页插件实现商品分页查询;
- Redis 缓存:商品详情缓存(高频查询,缓存过期时间 30 分钟,更新商品时删除缓存);
- 缓存预热:项目启动时将热门商品信息加载到 Redis(避免首次查询穿透数据库);
- Sentinel 熔断:配置商品查询接口熔断规则,服务故障时返回兜底数据(如默认商品列表);
- 图片上传:集成 MinIO(分布式对象存储)实现商品图片上传,返回图片 URL(可选,也可用本地存储)。
生产问题解决方案
- 缓存穿透:查询不存在的商品时,Redis 缓存空值(过期时间 5 分钟),避免每次都查数据库;
- 缓存击穿:热门商品详情查询用 Redis 分布式锁,避免缓存过期时大量请求同时查数据库;
- 商品库存超卖:库存信息不存 Redis,由库存微服务单独管理,商品服务只做展示。
核心接口(RESTful 规范)
- POST /product:新增商品
- PUT /product:修改商品
- DELETE /product/{id}:删除商品
- GET /product/list:商品列表查询(分页 + 条件)
- GET /product/detail/{id}:商品详情查询
- GET /product/category:商品分类列表
4. 库存微服务(stock-service:8004)【订单依赖,先于订单开发】
核心业务
库存初始化、库存扣减、库存回滚、库存查询。
核心技术点
- 分布式锁:扣减库存时用 Redis 分布式锁(Redisson 实现),避免多线程同时扣减导致超卖;
- 消息队列:提供同步扣减(订单创建时直接扣)和异步扣减(发送 MQ 消息,消费后扣)两种方式;
- 事务管理:库存扣减 / 回滚加 Spring 事务,保证数据库操作原子性;
- OpenFeign 远程调用:提供 Feign 客户端接口,供订单服务远程调用扣减 / 回滚库存。
生产问题解决方案
- 库存超卖:Redis 分布式锁 + 数据库库存字段非空校验(stock > 0),双重保障;
- 库存回滚:订单创建失败时,远程调用库存回滚接口,或通过 MQ 死信队列实现自动回滚;
- 分布式锁释放:用 Redisson 的可重入锁,避免业务异常导致锁无法释放(自动过期)。
核心 Feign 接口(供订单服务调用)
java
运行
@FeignClient(value = "stock-service") // 对应库存服务名 public interface StockFeignClient { // 扣减库存 @PostMapping("/stock/deduct") Result<?> deduct(@RequestParam("productId") Long productId, @RequestParam("num") Integer num); // 回滚库存 @PostMapping("/stock/rollback") Result<?> rollback(@RequestParam("productId") Long productId, @RequestParam("num") Integer num); // 查询库存 @GetMapping("/stock/{productId}") Result<Integer> getStock(@PathVariable("productId") Long productId); } 5. 订单微服务(order-service:8003)【核心业务微服务,串联所有服务】
核心业务
创建订单、订单查询、订单取消、订单状态更新,核心流程:用户下单→校验商品→远程扣减库存→生成订单→发送支付消息→等待支付。
核心技术点
- OpenFeign 远程调用:调用用户服务校验用户、调用商品服务校验商品、调用库存服务扣减库存;
- RocketMQ 异步通信:订单创建成功后,发送 MQ 消息到支付服务,触发支付流程,无需同步等待;
- 分布式事务:用 Seata AT 模式实现分布式事务(订单服务创建订单 + 库存服务扣减库存,要么都成功,要么都失败);
- Redis 分布式 ID:用雪花算法生成订单号(全局唯一,避免重复);
- 订单超时取消:用 RocketMQ 延时消息,订单创建后发送 30 分钟延时消息,未支付则自动取消并回滚库存。
生产问题解决方案
- 分布式事务一致性:Seata AT 模式(无侵入,适合新手),替代传统的 2PC,性能更好;
- 接口幂等性:创建订单接口用 “用户 ID + 商品 ID” 作为唯一键,Redis 存储唯一键,避免重复下单;
- 远程调用超时:配置 Feign 超时时间(连接超时 500ms,读取超时 3000ms),配合 Sentinel 熔断,避免服务阻塞;
- 订单数据量大:订单表按时间分表(如 order_202601、order_202602),用 MyBatis-Plus 分表插件实现。
核心接口(RESTful 规范)
- POST /order/create:创建订单(核心接口)
- GET /order/list/{userId}:查询用户订单列表
- GET /order/detail/{orderNo}:查询订单详情
- POST /order/cancel/{orderNo}:取消订单
- POST /order/updateStatus:更新订单状态(由支付服务调用)
6. 支付微服务(pay-service:8005)
核心业务
支付回调、支付状态查询、退款处理(简易版,对接模拟支付,无需真实第三方支付)。
核心技术点
- RocketMQ 消费:消费订单服务发送的支付消息,生成支付单;
- 远程调用:支付成功后,远程调用订单服务更新订单状态为 “已支付”;
- 支付回调:提供回调接口,模拟第三方支付平台的支付成功回调;
- Redis 缓存:支付单信息缓存,方便查询支付状态;
- 幂等性处理:支付回调接口做幂等性校验,避免重复回调更新订单状态。
生产问题解决方案
- 支付回调重复:用 Redis 记录回调订单号,已处理的回调直接返回成功;
- 支付超时:配合订单服务的延时消息,未支付则触发订单取消;
- 退款事务:退款时调用订单服务更新状态 + 用户账户退款,用 Seata 实现分布式事务。
核心接口
- GET /pay/{orderNo}:查询支付状态
- POST /pay/callback:支付成功回调(模拟)
- POST /pay/refund:退款申请
五、项目核心特性落地(全项目通用,提升项目质量)
1. 配置中心(Nacos)
将所有微服务的公共配置(数据库、Redis、MQ、Feign、Sentinel)抽离到 Nacos,实现配置统一管理,动态刷新(修改配置无需重启服务):
- 每个微服务在 Nacos 创建配置文件:
{服务名}-dev.yml(如 user-service-dev.yml); - 微服务通过
@RefreshScope注解实现配置动态刷新; - 核心配置抽离:数据库连接、Redis 地址、MQ 地址、Feign 超时时间、Sentinel 规则。
2. 服务注册与发现(Nacos)
所有微服务都注册到 Nacos,通过服务名远程调用,无需硬编码 IP: 端口,支持服务扩容 / 缩容(新增服务节点自动注册,网关自动负载均衡)。
3. 熔断限流(Sentinel)
- 服务层限流:每个微服务的核心接口配置 Sentinel 限流规则(QPS / 并发数);
- 服务层熔断:远程调用失败时触发熔断,快速返回兜底数据,避免服务雪崩;
- 网关层限流:网关对所有请求做全局限流,保护整个微服务系统。
4. 链路追踪(SkyWalking)
所有微服务引入 SkyWalking 依赖,实现全链路请求追踪,可在 SkyWalking 控制台查看:
- 请求从网关到各个微服务的调用轨迹;
- 每个接口的耗时、调用次数、错误率;
- 快速定位慢接口 / 报错接口(如订单创建慢,可查看是哪个远程调用耗时过长)。
5. 日志规范
- 所有微服务统一日志格式,日志中携带请求 ID、服务名、方法名;
- 日志级别规范:DEBUG(开发调试)、INFO(业务流程)、WARN(警告,如缓存过期)、ERROR(错误,如数据库异常);
- 禁止打印敏感信息(密码、手机号、身份证号,打印时做脱敏处理);
- 可选集成 ELK:将所有微服务的日志收集到 Elasticsearch,通过 Kibana 可视化查询。
六、项目容器化部署(Docker)
开发完成后,将每个微服务打包成Docker 镜像,通过docker-compose一键启动所有服务,实现环境一致化,部署自动化:
1. 每个微服务编写 Dockerfile
dockerfile
# 基础镜像 FROM openjdk:8-jdk-alpine # 作者 MAINTAINER example # 挂载目录 VOLUME /tmp # 复制jar包到镜像 COPY target/*.jar app.jar # 暴露端口 EXPOSE 8001 # 启动命令 ENTRYPOINT ["java","-jar","/app.jar","--spring.profiles.active=dev"] 2. 编写 docker-compose.yml(一键启动所有服务)
包含所有微服务、中间件(可选,也可单独部署),执行docker-compose up -d一键启动,docker-compose down一键停止。
3. 部署验证
- 访问 Nacos 控制台:http://localhost:8848,查看所有服务是否注册成功;
- 访问网关接口:http://localhost:9000/user/info/1,查看是否能正常返回数据;
- 访问 Sentinel 控制台:http://localhost:8080,查看限流 / 熔断规则是否生效;
- 访问 SkyWalking 控制台:http://localhost:8081,查看请求链路是否正常。
七、项目后续扩展(可选,提升项目深度)
做完基础版本后,可根据时间 / 能力扩展以下功能,让项目更贴合实际生产,简历更有亮点:
- 权限管理:集成 Spring Security/Shiro 实现基于 RBAC 的权限管理(角色→权限→接口);
- 分库分表:用 Sharding-JDBC 实现订单表 / 用户表的分库分表,解决大数据量问题;
- 真实支付对接:对接支付宝 / 微信支付的沙箱环境,实现真实的支付流程;
- 服务监控:集成 Prometheus+Grafana 实现微服务监控(CPU / 内存 / 磁盘 / 接口耗时);
- 自动化部署:集成 Jenkins 实现 “代码提交→自动打包→自动部署” 的 CI/CD 流程;
- 多环境配置:在 Nacos 创建 dev(开发)、test(测试)、prod(生产)环境配置,实现环境隔离。
八、项目简历写法(重点突出,贴合求职)
把这个项目写到简历上时,不要只写功能,要写技术点 + 解决的问题,示例如下:
项目名称:电商微服务系统
项目描述:
基于 SpringCloud Alibaba 搭建的分布式电商微服务系统,拆分用户、商品、订单、库存、支付、网关 6 个微服务,实现商品管理、订单创建、库存扣减、支付回调等核心业务,支持服务注册发现、配置统一管理、熔断限流、全链路追踪,系统高可用、高并发、易扩展。
技术栈:
SpringBoot2.7 + SpringCloud Alibaba2021 + Nacos + OpenFeign + Gateway + Sentinel + Seata + Redis + RocketMQ + MyBatis-Plus + MySQL + Docker + SkyWalking
核心职责:
- 搭建项目父子工程结构,抽离 common-core 通用模块,实现统一响应、全局异常、通用工具类,提升开发效率 80%;
- 基于 Nacos 实现服务注册发现和配置中心,统一管理所有微服务配置,支持配置动态刷新,避免重启服务;
- 基于 OpenFeign 实现微服务远程调用,配置超时和熔断规则,解决服务调用阻塞问题;
- 集成 Redis 实现商品缓存、分布式锁、分布式 ID,解决缓存穿透 / 击穿 / 超卖问题;
- 基于 Seata AT 模式实现分布式事务,保证订单创建和库存扣减的数据一致性;
- 集成 RocketMQ 实现异步通信和延时消息,完成订单超时取消、支付消息推送等功能;
- 基于 Sentinel 实现网关和服务层的限流熔断,保护系统免受高并发冲击;
- 集成 SkyWalking 实现全链路追踪,快速定位系统慢接口和报错点,提升问题排查效率;
- 将所有微服务容器化,编写 Dockerfile 和 docker-compose.yml,实现项目一键部署;
- 遵循 RESTful 接口规范和阿里巴巴代码规范,保证代码的可读性和可维护性。
项目亮点:
- 采用微服务架构,服务解耦,支持单独扩容,提升系统并发能力;
- 实现多级缓存和分布式锁,解决电商场景下的缓存问题和库存超卖问题;
- 基于 Seata 和 MQ 实现分布式事务,保证跨服务操作的数据一致性;
- 完善的工程化规范,统一响应、异常、日志,提升团队协作效率;
- 容器化部署 + 一键启动,保证开发 / 测试 / 生产环境一致,降低部署成本。
九、开发注意事项(避坑指南)
- 分层开发:严格遵循 Controller→Service→Mapper,Controller 只做请求接收 / 返回,Service 做业务逻辑,Mapper 只做数据库操作;
- 异常处理:业务中主动抛出自定义 BusinessException,避免抛出 RuntimeException,保证异常信息友好;
- 日志打印:关键业务流程必须打印日志(如订单创建、库存扣减),日志中携带核心参数(订单号、商品 ID);
- 远程调用:Feign 远程调用必须做异常处理,配合 Sentinel 熔断,避免服务调用失败导致整个流程中断;
- Redis 操作:所有 Redis 操作必须加异常捕获,避免 Redis 宕机导致业务流程中断;
- 代码规范:遵循阿里巴巴 Java 开发手册,禁止魔法值、禁止跨层调用、禁止在循环中执行数据库 / Redis 操作;
- 测试:每个接口开发完成后,先通过 PostMan 测试,保证接口正常后再进行联调;
- 提交规范:Git 提交信息遵循 “feat:新增商品接口”“fix:修复库存扣减超卖问题” 规范,方便代码追溯。