天机の学堂

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

相关推荐
ps酷教程2 小时前
Jackson 解决没有无参构造函数的反序列化问题
java
NiceCloud喜云2 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
_日拱一卒3 小时前
LeetCode:994腐烂的橘子
java·数据结构·算法·leetcode·深度优先
隔窗听雨眠4 小时前
Nginx网关响应慢排查手记
java·服务器·nginx
智慧物业老杨4 小时前
智慧物业合同周期管理系统:从风险预警到智能交接的全流程数智化落地方案
java·人工智能·python
源码宝4 小时前
MES系统源码:Java8 + SpringBoot2.7 + MySQL8 + Redis,后端源码清爽易扩展
java·后端·源码·springboot·mes系统·源码二开·mes源码
JAVA社区5 小时前
Java高级全套教程(十)—— SpringCloudAlibaba超详细实战详解
java·开发语言·spring cloud·面试·职场和发展
金銀銅鐵5 小时前
[Java] 如何理解 class 文件中方法的 descriptor?
java·后端
云烟成雨TD5 小时前
Spring AI Alibaba 1.x 系列【63】AI Agent 长期记忆
java·人工智能·spring
憧憬成为java架构高手的小白5 小时前
苍穹外卖--day09
java·spring boot·百度