熟悉项目的最佳方案是修复BUG
技术架构

企业开发模式
微服务项目与传统项目相比,包含模块非常多,每个模块都要独立部署,因此在开发模式上有很大差别:
-
开发人员成倍增多,分组分别开发不同的微服务模块
-
微服务模块之间有业务关联,需要相互协作
在开发的不同阶段,有不同的测试手段
-
单元测试:测试最小可测单元
-
集成测试:验证某个功能接口
-
组件测试:验证微服务组件
-
端对端联调:验证整个系统
Mock服务:模拟服务,可以基于提前定义的规则对请求返回指定值


持续集成
DevOps
-
自动构建、发布、测试
-
防止主干和分支存在较大差异
-
快速发现错误、解决错误
Jenkins、Gogs、Docker

本地开发部署
我们的微服务都支持多环境部署,因此配置文件有多个;部署到虚拟机中会使用dev环境配置,而在本地应该使用local环境配置
我们可以利用IDEA来配置微服务启动时要激活的环境:

熟悉项目
项目结构
首先是项目结构,目前企业微服务开发项目结构有两种模式:
-
每个项目下面的每一个微服务,需要创建一个Project,尽可能降低耦合
-
每个项目创建一个Project,项目下的多个微服务是Project的Module,方便管理
天机学堂采用二:

配置文件规范
SpringBoot的配置文件支持多环境配置,在天机学堂也基于不同环境有不同配置:
除了基本配置之外,其他的配置都放在了Nacons共享,包括两大类:

共享的配置
微服务中可能会根据业务变化的配置
阅读源码
-
找到请求入口:在企业内开发,我们是接手他人代码,可以通过交流弄清楚入口。否则就只能通过前端入手
-
清理请求链路:找到请求入口后,先总览项目结构,弄清楚前端请求如何抵达微服务,经过了那些地方,对解决BUG有帮助
-
紧跟主线:源码非常繁杂,不要试图弄懂每一个细节。紧跟业务主线,先梳理整体脉络,形成整体业务流程图
-
步步深入:最后,基于业务场景,定位核心问题点,抽丝剥茧,展开来阅读细节,寻找问题所在
远程调试
如果部署的微服务不在本地,可以利用IDEA的远程调试功能

// 3.判断订单所属用户与当前登录用户是否一致 if(!Objects.equals(userId, order.getUserId())){ // 不一致,说明不是当前用户的订单,结束 throw new BadRequestException("不能删除他人订单"); }
其中"!="两边是包装类,使用的是享元模式(对于频繁使用的对象,为了避免过度开销可以提前创建出来大家共享),可以尽可能的节省空间,也可以避免频繁的创建与销毁
"!="比较的是地址,导致不同
部署测试
-
本地单元测试:以代码块、方法作为测试的最小单元,测试基本概念是否健康
-
本地接口测试:在本地测试整个接口是否按照预期的方式运行。一般可以采用Swagger来测试
-
组件测试:如果业务跨多个微服务,则需要多个微服务组件联合来做组件测试
-
开发环境联调:最后,将项目部署到开发环境,做前后端联调。然后做测试环境、预发布环境联调
当我们完成项目的BUG修复后,可以把项目提交到Git私服,而Jenkins可以帮我们完成项目的自动编译、构建
