天机の学堂

熟悉项目的最佳方案是修复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可以帮我们完成项目的自动编译、构建

相关推荐
行者全栈架构师4 小时前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_04 小时前
mac(m5)平台编译openjdk
java
唐青枫1 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马1 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261351 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261351 天前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454752 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
昵称为空C2 天前
手撸一个动态 SQL 执行引擎:不重启服务,在线增删改查任意数据库
spring boot·后端
东坡白菜2 天前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈
唐青枫2 天前
Java Tomcat 实战指南:从 Servlet 容器到 Spring Boot 部署
java