之前写过一篇,这次详细再说下
若依微服务版改造 拆分多仓库(带源码)_CJ点的博客-CSDN博客
一、前言
目标:若依的单体项目转换成分布式部署
效果:结合springCloud、Nacos配置中心模式,实现微服务化拆分
难点:
-
原项目为若依脚手架单体项目还带一些业务模块,无法简单复制粘贴迁移
-
基础权限表结构带有公司业务字段(创建人ID等)
-
维护成本在,不能过多拆分。(容易拖死自己)
-
原项目mybatis-plus结合的太深(自动注入创建ID等),分布式必须继续使用
-
若依的分布式项目不是直接分仓库的
可利用点:
-
若依提供单体和分布式的脚手架,用的数据库表95%是一样
-
有公司的其它分布式架构参考
二、架构的选择
若依单体架构,原项目的架构图,所有的代码都是一个仓库的。
(framework 、ruoyi-system 组成核心的权限模块,代码集中一个仓库,各个模块之间的引用非常紧密,基本拆不开)
com.ruoyi
├── common // 工具类
│ └── annotation // 自定义注解
│ └── config // 全局配置
│ └── constant // 通用常量
│ └── core // 核心控制
│ └── enums // 通用枚举
│ └── exception // 通用异常
│ └── filter // 过滤器处理
│ └── utils // 通用类处理
├── framework // 框架核心
│ └── aspectj // 注解实现
│ └── config // 系统配置
│ └── datasource // 数据权限
│ └── interceptor // 拦截器
│ └── manager // 异步处理
│ └── security // 权限控制
│ └── web // 前端控制
├── ruoyi-generator // 代码生成(可移除)
├── ruoyi-quartz // 定时任务(可移除)
├── ruoyi-system // 系统代码
├── ruoyi-admin // 后台服务
├── ruoyi-business //业务模块
├── ruoyi-autoBuilder // 业务模块
├── ruoyi-datastata // 业务模块
参考公司的一个分布式架构
(缺失权限、基础系统模块,核心通用模块不够全、业务不通)
├── fenxiao-admin // 管理后台总出口
├── fenxiao-application // 小程序端总出口
├── fenxiao-gateway // 网关模块 [8080]
├── fenxiao-api // 接口模块
│ └── fenxia-api-system // 系统接口
├── fenxiao-common // 通用模块
│ └── fenxiao-common-core // 核心模块
│ └── fenxiao-common-datascope // 权限范围
│ └── fenxiao-common-datasource // 多数据源
│ └── fenxiao-common-log // 日志记录
│ └── fenxiao-common-redis // 缓存服务
│ └── fenxiao-common-security // 安全模块
│ └── fenxiao-common-swagger // 系统接口
├── fenxiao-parent // 总的maven管理模块
├── fenxiao-modules // 业务模块
├── fenxiao-modules // 业务模块
├── fenxiao-modules // 业务模块
├── fenxiao-modules // 业务模块
若依分布式式架构
(没有结合Mybati-plus\表结构缺失创建人ID、代码都集中在一个仓库、缺失一个maven版本管理模块单独作为模组存储)
com.ruoyi
├── ruoyi-ui // 前端框架 [80]
├── ruoyi-gateway // 网关模块 [8080]
├── ruoyi-auth // 认证中心 [9200]
├── ruoyi-api // 接口模块
│ └── ruoyi-api-system // 系统接口
├── ruoyi-common // 通用模块
│ └── ruoyi-common-core // 核心模块
│ └── ruoyi-common-datascope // 权限范围
│ └── ruoyi-common-datasource // 多数据源
│ └── ruoyi-common-log // 日志记录
│ └── ruoyi-common-redis // 缓存服务
│ └── ruoyi-common-security // 安全模块
│ └── ruoyi-common-swagger // 系统接口
├── ruoyi-modules // 业务模块
│ └── ruoyi-system // 系统模块 [9201]
│ └── ruoyi-gen // 代码生成 [9202]
│ └── ruoyi-job // 定时任务 [9203]
│ └── ruoyi-file // 文件服务 [9300]
├── ruoyi-visual // 图形化管理模块
│ └── ruoyi-visual-monitor // 监控中心 [9100]
├──pom.xml // 公共依赖
最终的选择是
使用最新的若依分布式框架+原公司的分布式的parent模块的形式,并入原项目的业务模块。
三、持续迭代改造
一阶段
将若依的分布式架构拆分成多仓库存储。auth+system 组成一个仓库,新增一个parent仓库来管理maven版本,common新增一个Mybaits-plus模块(为后面的业务模块使用)
源码:https://gitee.com/bdp-one
com.ruoyi
├── ruoyi-ui // 前端框架 [80]
├── ruoyi-gateway // 网关模块 [8080]
├── ruoyi-system // 认证中心 + 权限模块
├── ruoyi-api // 接口模块
│ └── ruoyi-api-system // 系统接口
├── ruoyi-common // 通用模块
│ └── ruoyi-common-core // 核心模块
│ └── ruoyi-common-datascope // 权限范围
│ └── ruoyi-common-datasource // 多数据源
│ └── ruoyi-common-log // 日志记录
│ └── ruoyi-common-redis // 缓存服务
│ └── ruoyi-common-security // 安全模块
│ └── ruoyi-common-swagger // 系统接口
│ └── ruoyi-common-mybatis-plus // mybatis-plus
├── ruoyi-modules // 业务模块
│ └── ruoyi-controller
│ └── ruoyi-gen // 代码生成 [9202]
├──ruoyi-parent // maven版本管理+SQL初始
│ └── sql
二阶段
开始逐步转变成符合公司的开发规范和业务。
1、修改数据库底层的权限表,新增创建人ID
2、新增修改相应JAVA实体类和mapper.xml文件
3、排查个别不同的表字段,修改权限代码
源码:https://gitee.com/organizations/bdp-test
三阶段
-
对各种各样的原项目的工具类引入到新的架构里面(复制粘贴,使用正确的jar包和版本)
-
解决包冲突(guava),更新核心的nacos为比较新的2.0.3版本
-
修改redis为集群配置
-
将原业务模块直接迁移过去
-
新增common-api-core 存在 HTTP工具类,解决 common 和api 两个模块之间 的相互依赖问题
-
没有新建一个总的出口模块,减少一些重复的开发量(但不知好坏)
├── bdp-parent // 父级pom模组公共依赖
│ └── sql // sql
├── bdp-ui // 前端框架 [80]
├── bdp-gateway // 网关模块 [8080]
├── bdp-api // 服务内调用-接口模块
│ └── bdp-api-core // HTTP核心工具类接口
│ └── bdp-api-system // 系统接口
│ └── bdp-api-modules // 原BDP接口
├── bdp-common // 通用模块
│ └── bdp-common-core // 核心模块
│ └── bdp-common-datascope // 权限范围
│ └── bdp-common-datasource // 多数据源
│ └── bdp-common-log // 日志记录
│ └── bdp-common-redis // 缓存服务
│ └── bdp-common-security // 安全模块
│ └── bdp-common-swagger // 系统接口
│ └── bdp-common-mybatis-plus // mybatis-plus拓展
│ └── bdp-common-sso // sso
│ └── bdp-common-es // es
├── bdp-modules // 业务模块
│ └── bdp-modules-controller // 这里做一个总的控制器
│ └── bdp-gen // 代码生成
│ └── bdp-business1 //业务模块-1
│ └── bdp-business2 // 业务模块-2
├── bdp-business3 //业务模块-
├── bdp-system // 系统模块+认证中心 [9201]
四、遇到的困难
-
jar 冲突
-
maven 的使用(parent模块没有指定jdk版本导致项目错乱、maven私仓账号密码错了导致项目错乱)