RuoYi OpenAPI集成从单体到微服务改造全过程记录
背景与目标
随着业务发展,需要将原本集成在 RuoYi 单体工程(ruoyi-admin
、ruoyi-framework
)中的高仙机器人OpenAPI对接与业务逻辑,独立出来,微服务化迁移到 ruoyi-modules-robot
和 ruoyi-api-robot
,实现服务解耦、便于扩展和维护。
一、原有结构(单体集成)
原始项目结构如下图所示:
ruoyi-admin
负责全部Web接口,控制器、业务服务、DAO都在这里实现
例如高仙机器人接口相关代码在
com.ruoyi.web.controller.external
com.ruoyi.web.controller.robot
com.ruoyi.robot.domain
com.ruoyi.robot.mapper
com.ruoyi.robot.service
com.ruoyi.robot.service.impl
ruoyi-framework
公共工具、配置与核心DTO,全部集中于此
高仙相关DTO、部分VO最初放在
com.ruoyi.framework.dto com.ruoyi.framework.dto.external
二、重构思路
目标是将高仙接口相关的Controller/Service/Mapper/Domain等全部抽离,形成独立的
robot
微服务。高仙相关的数据结构DTO全部从
framework
挪到新建的ruoyi-api-robot
中,专门负责数据对象的统一管理,减少各服务之间的耦合。新的微服务需要在Spring Cloud Alibaba体系下注册到Nacos,统一走
ruoyi-gateway
网关分发。前端Vue部分接口路径同步修改。
配置、数据库、依赖、接口分发都要重新梳理和注册。
三、微服务化后的新结构
1. 后端代码模块分布
ruoyi-modules/ruoyi-robot
高仙机器人服务的微服务实现,包括:config
:配置类controller
:REST接口实现(external
为高仙相关API,其余为业务接口)domain
、mapper
、service
、openapi
等分层RuoYiRobotApplication
:Spring Boot 启动类
ruoyi-api/ruoyi-api-robot
专用DTO数据对象模块,供robot服务/其它服务依赖和调用com.ruoyi.robot.api.dto
以前在framework/dto/external下的全部迁移到此
其它业务服务、网关等未变
2. 原有代码拆分迁移
原单体结构 | 新微服务结构(对应迁移到) |
---|---|
ruoyi-admin: controller/external | ruoyi-robot: controller/external |
ruoyi-admin: controller/robot | ruoyi-robot: controller/robot |
ruoyi-admin: robot/service/impl | ruoyi-robot: service/impl |
ruoyi-admin: robot/domain/mapper | ruoyi-robot: domain/mapper |
ruoyi-framework: dto/external | ruoyi-api-robot: api/dto |
3. Nacos 配置与网关转发
新增
ruoyi-robot
服务到Nacos注册ruoyi-gateway-dev.yml
配置:- id: ruoyi-roboturi: lb://ruoyi-robotpredicates:- Path=/external/gs/**
各个接口前缀
/external/gs/**
由网关转发到robot微服务ruoyi-robot
服务自己的controller路由仍然保留/external/gs/
前缀,确保路径一致
4.配置体系的变化与升级
原单体项目:本地 application-druid.yml
配置
在迁移前,所有与数据库、Redis、高仙API等相关的配置信息,都集中在 ruoyi-admin/resources/application-druid.yml
及 application.yml
、application-dev.yml
这类本地文件中。例如数据库账号密码、Druid连接池参数、第三方平台密钥等,都是直接写在本地配置文件里,启动时自动读取。
微服务化后的新方式:Nacos 配置中心 + 各服务独立 bootstrap
新方案具体做法:
删除/废弃原有的 application-druid.yml,本地不再维护数据库配置。
在 Nacos 配置中心新建
ruoyi-robot-dev.yml
,用于专门维护高仙机器人微服务的开发环境配置,包括数据源、Redis、API密钥等全部内容。在
ruoyi-robot
服务模块下,使用bootstrap.yml
启动参数,配置 Nacos 连接、服务名、环境标识等(并引用 Nacos 上的配置信息)。数据源、第三方接口等全部由 Nacos 拉取,运维上更灵活,线上环境配置变更无需重启服务。
结构示意:
迁移前(本地文件) | 迁移后(微服务+nacos) |
---|---|
ruoyi-admin/resources/application-druid.yml | nacos配置中心/ruoyi-robot-dev.yml |
ruoyi-admin/resources/application.yml | ruoyi-robot/resources/bootstrap.yml(只负责Nacos/环境标识等) |
配置中心优势
实现配置集中管理、动态刷新、按服务拆分
支持多环境(dev/test/prod)自动切换和灰度发布
安全性提升:敏感信息不落盘,支持密钥加密
四、迁移难点与填坑记录
1. DTO迁移
强制解耦:所有原来framework/dto/external目录下的DTO必须移动到新的
ruoyi-api-robot
模块,否则其它微服务依赖编译会因包未找到报错。记得调整引用路径,重新组织包结构。
2. 配置同步与分离
数据源配置全部拆分到robot模块专属的配置文件,避免与其它业务互相影响。
Nacos中分别维护
ruoyi-robot-dev.yml
,支持服务独立扩缩容和运维。
3. 接口路径一致性
保证网关配置Path和后端controller的@RequestMapping前缀完全匹配,否则会出现404或401问题。
建议controller保持
/external/gs/xxx
前缀,方便对齐老接口和前端适配。
4. 本地开发与多环境同步
Nacos配置可在“配置管理”页面批量导出,再在新环境导入,快速实现配置迁移。
五、迁移后效果
业务功能完全解耦,高仙相关微服务独立扩容、独立开发、独立部署
接口路径、DTO引用完全兼容
前端页面无需大改,接口可平滑切换
运维部署和权限控制也更加灵活
六、总结
本次迁移,从单体到微服务,不仅理清了高仙OpenAPI相关代码的业务边界,还规范了DTO分层管理。新结构便于后续扩展和微服务治理,也提升了系统稳定性。强烈建议遇到第三方平台深度集成的场景,都使用微服务模式来解耦,便于后期维护和升级。