【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程

文章目录

    • 前言
    • 参考目录
    • 简单的新旧对比
      • 旧版目录结构
      • 新版目录结构(V4.2.0+)
      • 旧版序列图(简化版)
      • 新版序列图(简化版)(V4.2.0+)
    • 调用流程分析
      • 1、`SystemApplicationRunner#run`
      • 2、`SysOssConfigServiceImpl#init`
      • 2.1、配置缓存 `SysOssConfigServiceImpl#setConfigCache`
      • 3、`OssFactory#init`
      • 3.1、模拟集群配置 8080 | 8181
      • 3.2、8080 收到 8181 发布的订阅消息

前言

上一篇 OSS 模块相关的文章有说到版本升级之后 OSS 模块进行了重构,因为这一部分的代码写法我个人觉得是很值得学习的,因此有了今天这篇文章。

在准备本文的时候,相关方法有用到 Redis 发布订阅的功能,因此先对发布订阅功能进行了简单的分析,再回到这篇文章来。

参考目录

  • Spring Boot 整合 AWS S3协议 OSS功能 支持 七牛、阿里、Minio等一切支持S3协议的云厂商
    狮子大佬的集成博客。
  • OSS功能
    框架 wiki 中对 OSS 模块的使用说明。
  • 什么是 Amazon S3?
    亚马逊官方文档说明。
  • 一文读懂 AWS S3
    知乎上对于 AWS S3 的说明。
  • 【RuoYi-Vue-Plus】学习笔记 01 - OSS模块(一)OSS加载流程
    旧版加载流程分析指路。

简单的新旧对比

旧版目录结构

【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第1张图片

新版目录结构(V4.2.0+)

【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第2张图片
显而易见的是,新版的代码量减少了。我们再来看看序列图,序列图省略了一些细节的方法调用,只保留了主要方法。

旧版序列图(简化版)

【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第3张图片

新版序列图(简化版)(V4.2.0+)

【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第4张图片
下面通过 debug 方式来看下 V4.2.0+ 版本的加载流程。

调用流程分析

1、SystemApplicationRunner#run

【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第5张图片
基础数据的缓存都是在这个方法里面完成的。

2、SysOssConfigServiceImpl#init

【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第6张图片
这是初始化配置的主要方法:

  1. 查询所有的 OSS 配置
  2. 遍历并缓存所有配置,如果是默认配置,会缓存到 Redis 中

【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第7张图片
此处设置的默认配置是 minio
【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第8张图片

2.1、配置缓存 SysOssConfigServiceImpl#setConfigCache

【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第9张图片
每一个配置都使用 Spring Cache 缓存,并发布订阅消息。缓存结果如下:
【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第10张图片

3、OssFactory#init

【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第11张图片
这个方法打印了日志,并且订阅了默认配置的通道。

如果是单机部署,这里就已经执行结束了。

订阅的功能去请教了狮子大佬,这里是给 集群 用的,一个机器修改了配置,会通知其他机器。光说不练假把式,这里来实验一下,修改一下服务端口,启动两次,模拟一下集群。

3.1、模拟集群配置 8080 | 8181

目前的端口是 8080
【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第12张图片
修改 idea 配置(我测试的版本是 2022.2):
【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第13张图片
【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第14张图片
【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第15张图片
配置完成后:
【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第16张图片
复制一个启动配置,设置启动端口号为 8181,并启动:
【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第17张图片
【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第18张图片
8181 服务启动完成后,发布订阅消息,8080 服务就会接收到。

3.2、8080 收到 8181 发布的订阅消息

【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第19张图片
8080 服务启动后,如果没有进行任何 OSS 操作直接启动 8181,则 if 判断为 false,没有初始化 OssClient,换句话说,getClient(configKey) 获取到的对象为空,所以不会刷新配置。

初始化是在上传时进行的,这个会放在下一篇文件上传流程时再详细展开,这里只演示 refresh 方法的逻辑。

操作步骤:

  1. 启动 8080 服务。
  2. /系统管理/文件管理 上传一张图片(目的:完成 OssClient 初始化)。
  3. 启动 8181 服务。
  4. 观察 8080 服务接收订阅消息的逻辑。

【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第20张图片
刷新配置:
【RuoYi-Vue-Plus】学习笔记 37 - OSS模块(七)V4.2.0+ 版本OSS加载流程_第21张图片
这里也是 new OssClient 再重新放到缓存里面。控制台打印:
在这里插入图片描述
如果不想启动两个服务也想看到效果的话,可以在配置管理里面新增默认配置或者修改默认配置的信息(注意是默认配置),也能进入 refresh 方法。

你可能感兴趣的:(框架学习,-,若依,/,RuoYi-Vue-Plus,#,OSS,RuoYi-Vue-Plus)