RuoYi OpenAPI集成从单体到微服务改造全过程记录

发布于:2025-08-11 ⋅ 阅读:(15) ⋅ 点赞:(0)

背景与目标

随着业务发展,需要将原本集成在 RuoYi 单体工程(ruoyi-adminruoyi-framework)中的高仙机器人OpenAPI对接与业务逻辑,独立出来,微服务化迁移到 ruoyi-modules-robotruoyi-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,其余为业务接口)

    • domainmapperserviceopenapi等分层

    • 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-robot
      uri: lb://ruoyi-robot
      predicates:
        - Path=/external/gs/**
    

  • 各个接口前缀 /external/gs/** 由网关转发到robot微服务

  • ruoyi-robot服务自己的controller路由仍然保留 /external/gs/ 前缀,确保路径一致

4.配置体系的变化与升级

原单体项目:本地 application-druid.yml 配置

在迁移前,所有与数据库、Redis、高仙API等相关的配置信息,都集中在 ruoyi-admin/resources/application-druid.ymlapplication.ymlapplication-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分层管理。新结构便于后续扩展和微服务治理,也提升了系统稳定性。强烈建议遇到第三方平台深度集成的场景,都使用微服务模式来解耦,便于后期维护和升级。


网站公告

今日签到

点亮在社区的每一天
去签到