当前位置: 首页 > news >正文

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/externalruoyi-robot: controller/external
ruoyi-admin: controller/robotruoyi-robot: controller/robot
ruoyi-admin: robot/service/implruoyi-robot: service/impl
ruoyi-admin: robot/domain/mapperruoyi-robot: domain/mapper
ruoyi-framework: dto/externalruoyi-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.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.ymlnacos配置中心/ruoyi-robot-dev.yml
ruoyi-admin/resources/application.ymlruoyi-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分层管理。新结构便于后续扩展和微服务治理,也提升了系统稳定性。强烈建议遇到第三方平台深度集成的场景,都使用微服务模式来解耦,便于后期维护和升级。

http://www.dtcms.com/a/319439.html

相关文章:

  • 高速公路安装定向广播的优势
  • centos VMware ESXi 扩容
  • 为什么任务顺序会影响效率?如何实现自定义顺序?
  • Python 基础详解:数据类型(Data Types)—— 程序的“数据基石”
  • Fiddler 安装配置教程
  • 认识汇编:解码计算机思维的底层语言(第一章)
  • 【YOLO学习笔记】YOLOv8详解解读
  • WEB开发-第二十七天(PHP篇)
  • 【Unity Plugins】使用ULipSync插件实现人物唇形模拟
  • 基于Spring Cloud Stream与Kafka的事件驱动微服务架构设计与实战指南
  • 【Python】基于Python自动化邮件发送系统:从配置到实现的完整指南
  • 【YOLOv8改进 - C2f融合】C2f融合SFS-Conv(空间 - 频率选择卷积)提升特征多样性,同时减少参数和计算量
  • 如何在 VS Code 中进行 `cherry-pick`
  • 使用Python验证常见的50个正则表达式
  • react接口防抖处理
  • [网格图DP]3363. 最多可收集的水果数目
  • 视频二维码如何助力博物馆打造智慧讲解体验
  • 数据库事务总结
  • 升级g++编译器
  • RK3568项目(十二)--linux驱动开发之基础通讯接口(上)
  • 时序数据库的功能与应用价值
  • RPC 解析
  • Renesas Electronics RZ/V2N 评估套件
  • 从密钥生成到功能限制:Electron 中 secure-electron-license-keys 的完整集成方案
  • Spring Cloud系列—LoadBalance负载均衡
  • 5分钟了解OpenCV
  • 用 Enigma Virtual Box 把 Qt 程序压成单文件 EXE——从编译、收集依赖到一键封包
  • 大数据spark、hasdoop 深度学习、机器学习算法的音乐平台用户情感分析系统设计与实现
  • 多线程 future.get()的线程阻塞是什么意思?
  • Spark Memory 内存设计的核心组件