天机の学堂

熟悉项目的最佳方案是修复BUG

技术架构

企业开发模式

微服务项目与传统项目相比,包含模块非常多,每个模块都要独立部署,因此在开发模式上有很大差别:

  • 开发人员成倍增多,分组分别开发不同的微服务模块

  • 微服务模块之间有业务关联,需要相互协作

在开发的不同阶段,有不同的测试手段

  • 单元测试:测试最小可测单元

  • 集成测试:验证某个功能接口

  • 组件测试:验证微服务组件

  • 端对端联调:验证整个系统

Mock服务:模拟服务,可以基于提前定义的规则对请求返回指定值

持续集成

DevOps

  1. 自动构建、发布、测试

  2. 防止主干和分支存在较大差异

  3. 快速发现错误、解决错误

Jenkins、Gogs、Docker

本地开发部署

我们的微服务都支持多环境部署,因此配置文件有多个;部署到虚拟机中会使用dev环境配置,而在本地应该使用local环境配置

我们可以利用IDEA来配置微服务启动时要激活的环境:

熟悉项目

项目结构

首先是项目结构,目前企业微服务开发项目结构有两种模式:

  • 每个项目下面的每一个微服务,需要创建一个Project,尽可能降低耦合

  • 每个项目创建一个Project,项目下的多个微服务是Project的Module,方便管理

天机学堂采用二:

配置文件规范

SpringBoot的配置文件支持多环境配置,在天机学堂也基于不同环境有不同配置:

除了基本配置之外,其他的配置都放在了Nacons共享,包括两大类:

共享的配置

微服务中可能会根据业务变化的配置

阅读源码

  1. 找到请求入口:在企业内开发,我们是接手他人代码,可以通过交流弄清楚入口。否则就只能通过前端入手

  2. 清理请求链路:找到请求入口后,先总览项目结构,弄清楚前端请求如何抵达微服务,经过了那些地方,对解决BUG有帮助

  3. 紧跟主线:源码非常繁杂,不要试图弄懂每一个细节。紧跟业务主线,先梳理整体脉络,形成整体业务流程图

  4. 步步深入:最后,基于业务场景,定位核心问题点,抽丝剥茧,展开来阅读细节,寻找问题所在

远程调试

如果部署的微服务不在本地,可以利用IDEA的远程调试功能

// 3.判断订单所属用户与当前登录用户是否一致 if(!Objects.equals(userId, order.getUserId())){ // 不一致,说明不是当前用户的订单,结束 throw new BadRequestException("不能删除他人订单"); }

其中"!="两边是包装类,使用的是享元模式(对于频繁使用的对象,为了避免过度开销可以提前创建出来大家共享),可以尽可能的节省空间,也可以避免频繁的创建与销毁

"!="比较的是地址,导致不同

部署测试

  1. 本地单元测试:以代码块、方法作为测试的最小单元,测试基本概念是否健康

  2. 本地接口测试:在本地测试整个接口是否按照预期的方式运行。一般可以采用Swagger来测试

  3. 组件测试:如果业务跨多个微服务,则需要多个微服务组件联合来做组件测试

  4. 开发环境联调:最后,将项目部署到开发环境,做前后端联调。然后做测试环境、预发布环境联调

当我们完成项目的BUG修复后,可以把项目提交到Git私服,而Jenkins可以帮我们完成项目的自动编译、构建

相关推荐
asdfg12589631 小时前
无用空数组的用法:numberList.toArray(new Integer[0])
java·开发语言
悠哉清闲1 小时前
生成pcm文件并播放查看波形
java·pcm
Devin~Y1 小时前
大厂Java面试实录:Spring Boot/JPA/Redis/Kafka/K8s 可观测性 + Spring AI RAG/Agent(小Y翻车现场)
java·spring boot·redis·mybatis·hibernate·spring mvc·jpa
likerhood1 小时前
认识 JVM:Java 程序背后的那台“隐形计算机”
java·开发语言·jvm
wangchunting1 小时前
Java9功能更新说明
java·开发语言
hikktn1 小时前
30万数据导出从2分钟到15秒:一场与内存溢出的生死较量【宗申集团】
java
武帝为此1 小时前
【软件开发日志介绍】
java·前端·数据库
likerhood1 小时前
Java 反射与注解的详细讲解
java·开发语言·数据库
asdfg12589631 小时前
从Java的设计模式看接口和实现---List与ArrayList
java·开发语言·设计模式·面向对象·面向接口