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

背景与目标

随着业务发展,需要将原本集成在 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分层管理。新结构便于后续扩展和微服务治理,也提升了系统稳定性。强烈建议遇到第三方平台深度集成的场景,都使用微服务模式来解耦,便于后期维护和升级。

相关推荐
chxii9 分钟前
2.9 插槽
前端·javascript·vue.js
jz_ddk10 分钟前
[科普] AI加速器架构全景图:从GPU到光计算的算力革命
人工智能·学习·算法·架构
程序员黄老师11 分钟前
Linux tail 命令详解
linux·运维
君科程序定做35 分钟前
文件管理从基础到高级:文件描述符、超大文件切片重组与快速删除实战
云原生·容器
我怎么又饿了呀1 小时前
Windows&Linux系统 安装 CUDA 和 cuDNN
linux·运维·windows
Java技术小馆1 小时前
PromptPilot打造高效AI提示词
java·后端·面试
whysqwhw1 小时前
线程池数量配置
java
斯普信专业组1 小时前
基于k8s环境下的pulsar常用命令(上)
云原生·容器·kubernetes·pulsar
接着奏乐接着舞。2 小时前
如何在Vue中使用拓扑图功能
前端·javascript·vue.js
xybDIY2 小时前
智能云探索:基于Amazon Bedrock与MCP Server的AWS资源AI运维实践
运维·人工智能·aws