RuoYi-Cloud-Vue 是一套基于 Spring Cloud Alibaba 微服务体系与 Vue 前端技术栈构建的企业级快速开发平台。其核心架构遵循"前后端分离、服务模块化、高内聚低耦合"的设计原则,能够有效解决单体应用在复杂业务场景下维护成本高、扩展性差的问题。
本文将从架构层次 、核心组件职责 、关键交互流程 以及设计亮点四个维度,以清晰、直观的方式为您解析这套架构的原理。
一、整体架构层次概览
RuoYi-Cloud-Vue 的架构可以抽象为以下五个层次,所有请求自上而下流转,各层职责明确:
| 层次 | 主要组成 | 核心职责 |
|---|---|---|
| 客户端层 | 浏览器、移动端 App、Postman 等 | 用户访问入口,发起 HTTP 请求,接收并渲染响应结果。 |
| 前端应用层 | Vue.js 项目(ruoyi-ui / ruoyi-ui-vue3) | 负责 UI 交互、路由管理、状态管理(Vuex/Pinia)、API 请求封装,并根据用户权限动态生成菜单。 |
| 接入与网关层 | Spring Cloud Gateway(ruoyi-gateway) | 系统的唯一入口。负责请求路由、统一鉴权(校验 JWT)、流量控制(集成 Sentinel)、跨域处理、日志记录。 |
| 核心业务服务层 | 认证中心(ruoyi-auth)、系统服务(ruoyi-system)、代码生成(ruoyi-gen)、定时任务(ruoyi-job)、文件服务(ruoyi-file)等 | 独立部署的微服务模块,每个模块聚焦于特定业务领域,通过 OpenFeign 进行服务间通信。 |
| 基础设施与支撑层 | Nacos(注册/配置中心)、Redis(缓存/分布式会话)、MySQL(关系型数据库)、Seata(分布式事务)、Sentinel(流量控制) | 为上层微服务提供服务发现、配置管理、数据持久化、缓存加速、分布式事务保证等底层支撑能力。 |
| 通用基础层 | ruoyi-common(通用工具模块)、ruoyi-api(Feign 接口定义) | 封装所有服务共享的工具类、安全配置、日志切面以及服务间调用的 API 接口,实现代码复用。 |
二、核心组件职责详解
1. 前端应用(ruoyi-ui / ruoyi-ui-vue3)
- 技术栈:Vue 2/3 + Element UI/Plus + Vuex/Pinia + Axios + Vite(Vue3 版本)。
- 职责 :
- 动态路由 :登录后根据后端返回的权限数据,利用 Vue Router 的
addRoute方法动态生成可访问的路由表。 - 权限控制 :通过自定义指令(如
v-hasPermi)实现按钮级别的操作权限控制。 - 请求封装:统一 Axios 实例,自动在请求头添加 JWT Token,统一处理响应错误(如 401 跳转登录)。
- 动态路由 :登录后根据后端返回的权限数据,利用 Vue Router 的
2. 网关模块(ruoyi-gateway)
- 技术栈:Spring Cloud Gateway + Reactive 编程模型。
- 职责 :
- 路由转发 :根据请求路径(如
/auth/**、/system/**)将请求转发到对应的微服务实例。 - 统一鉴权 :通过全局过滤器
AuthorizationFilter校验请求头中的 JWT Token 是否有效、是否过期。对于白名单 URL(如登录接口)直接放行。 - 流量控制:集成 Sentinel,可针对路由或 API 配置限流规则,保护后端服务。
- 跨域配置:统一处理前端跨域请求。
- 路由转发 :根据请求路径(如
3. 认证中心(ruoyi-auth)
- 技术栈:Spring Security + OAuth2 + JWT。
- 职责 :
- 用户认证 :接收登录请求,调用 Spring Security 的
UserDetailsService验证用户名密码。 - 令牌发放:认证通过后生成 JWT Token,并返回给前端。同时将 Token 与用户基本信息存入 Redis,实现会话状态管理。
- 令牌校验:提供接口供网关或其他服务校验 Token 的合法性。
- 用户认证 :接收登录请求,调用 Spring Security 的
4. 业务微服务模块(ruoyi-modules)
每个模块都是一个独立的 Spring Boot 应用,注册到 Nacos。
- 系统服务(ruoyi-system):提供用户、角色、菜单、部门、字典等基础管理功能。
- 代码生成服务(ruoyi-gen):在线生成前后端代码,支持单表、树表、主子表。
- 定时任务服务(ruoyi-job):基于 Quartz 实现分布式定时任务管理,支持 CRON 表达式。
- 文件服务(ruoyi-file):独立处理文件上传下载,可对接本地存储、MinIO、阿里云 OSS 等。
5. 基础设施组件
- Nacos :
- 注册中心:所有微服务启动时向 Nacos 注册自身实例信息,服务间通过服务名调用。
- 配置中心 :集中管理所有服务的配置文件(如
application.yml),支持配置动态刷新。
- Redis :
- 缓存:缓存字典数据、参数配置等热点数据,减轻数据库压力。
- 分布式会话:存储登录 Token 与用户信息,实现无状态认证下的会话状态管理。
- Sentinel:提供限流、熔断、降级能力,保护核心服务在高并发下的稳定性。
- Seata:解决跨服务调用时的分布式事务问题,保证数据最终一致性(目前项目中默认集成但需手动开启)。
6. 通用模块
- ruoyi-common:包含核心工具类(如 Redis 工具、字符串工具)、安全配置(Spring Security 核心配置)、日志切面、异常处理等。
- ruoyi-api:定义所有微服务对外提供的 Feign 接口,服务间调用只需引入该模块的依赖,即可像调用本地方法一样进行远程调用。
三、关键交互流程:一次登录请求的完整路径
下面以用户登录为例,详细说明各组件如何协同工作:
-
前端发起登录请求
用户在登录页输入用户名密码,点击登录。Vue 应用中的
login方法通过 Axios 向/auth/login发送 POST 请求。Axios 拦截器会在请求头中添加请求来源等基本信息。 -
网关路由与放行
请求到达网关(端口 8080)。网关的全局过滤器判断当前请求路径是否在白名单(如
/auth/login)中。由于登录接口无需认证,直接放行,并根据路由配置将请求转发给ruoyi-auth服务实例。 -
认证中心验证身份
ruoyi-auth接收到请求,Spring Security 的UsernamePasswordAuthenticationToken开始工作,调用自定义的UserDetailsService查询数据库(通过ruoyi-system的 Feign 接口获取用户信息)验证密码。- 验证成功 :生成 JWT Token,并将 Token 与用户基本信息(如 userId、权限列表)存入 Redis(key 为
token:xxxx,value 为用户信息)。最后将 Token 返回给前端。 - 验证失败:返回错误提示。
- 验证成功 :生成 JWT Token,并将 Token 与用户基本信息(如 userId、权限列表)存入 Redis(key 为
-
前端存储 Token 并获取用户信息
前端接收到成功响应后,将 Token 存储在
localStorage或sessionStorage中。随后立即调用另一个接口(如/system/user/getInfo)获取用户详细信息(昵称、头像)和权限数据(角色、权限标识、动态路由表)。 -
网关再次介入,携带 Token 的请求
获取用户信息的请求会携带 Token(通常在
Authorization头)。网关过滤器拦截到该请求,执行以下操作:- 解析 Token,校验签名和过期时间。
- 从 Redis 中根据 Token 获取用户信息,若不存在则返回 401。
- 校验通过后,将解析出的用户 ID、权限信息等添加到请求头中,转发给
ruoyi-system服务。
-
业务服务处理并返回数据
ruoyi-system接收到请求,根据请求头中的用户 ID 查询数据库,返回用户信息及权限数据。前端收到数据后,动态渲染菜单和页面元素。
四、设计亮点与原理
1. 无状态认证与 JWT + Redis 结合
- 采用 JWT 实现无状态认证,服务端无需存储 Session,便于水平扩展。
- 引入 Redis 辅助管理:存储 Token 的黑名单(用户注销时将 Token 加入黑名单)、在线用户踢出功能,同时通过 Redis 快速获取用户信息,避免重复解析 JWT。
2. 统一的 Feign 接口定义(ruoyi-api)
- 将各个微服务对外提供的接口抽象到独立的
ruoyi-api模块,服务间调用只需引入该模块的依赖,即可通过@FeignClient实现声明式 HTTP 调用,简化了服务间通信。
3. 精细化的权限控制(RBAC)
- 前端 :动态路由实现菜单级权限;自定义指令
v-hasPermi实现按钮级权限。 - 后端 :方法级权限控制,使用
@PreAuthorize注解校验用户是否拥有指定权限标识;数据权限通过自定义注解和 AOP 实现,可控制用户只能查看自己部门的数据。
4. 配置与服务的统一管理(Nacos)
- 所有微服务的配置统一存储在 Nacos 配置中心,支持多环境(dev、test、prod)隔离,配置变更可实时刷新,无需重启服务。
- 服务注册与发现基于 Nacos,实现了服务的动态伸缩和负载均衡。
5. 高可用设计
- 网关层集成 Sentinel,可针对热点 API 进行限流、熔断,防止雪崩效应。
- 核心服务(如系统服务)可部署多实例,通过 Nacos 实现负载均衡。
- 分布式事务 Seata 的集成,保证了跨服务操作的原子性(如用户注册时同时创建部门和角色)。
五、总结
RuoYi-Cloud-Vue 通过清晰的层次划分和模块化设计,构建了一套高内聚、低耦合、易扩展的微服务开发平台。它不仅集成了 Spring Cloud Alibaba 生态的主流组件(Nacos、Sentinel、Seata),还提供了完善的前后端权限控制、代码生成器、定时任务等企业级功能,能够帮助开发团队快速搭建稳定可靠的微服务应用。