码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【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加载流程
      旧版加载流程分析指路。

    简单的新旧对比

    旧版目录结构

    在这里插入图片描述

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

    在这里插入图片描述
    显而易见的是,新版的代码量减少了。我们再来看看序列图,序列图省略了一些细节的方法调用,只保留了主要方法。

    旧版序列图(简化版)

    在这里插入图片描述

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

    请添加图片描述
    下面通过 debug 方式来看下 V4.2.0+ 版本的加载流程。

    调用流程分析

    1、SystemApplicationRunner#run

    在这里插入图片描述
    基础数据的缓存都是在这个方法里面完成的。

    2、SysOssConfigServiceImpl#init

    在这里插入图片描述
    这是初始化配置的主要方法:

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

    在这里插入图片描述
    此处设置的默认配置是 minio:
    在这里插入图片描述

    2.1、配置缓存 SysOssConfigServiceImpl#setConfigCache

    在这里插入图片描述
    每一个配置都使用 Spring Cache 缓存,并发布订阅消息。缓存结果如下:
    在这里插入图片描述

    3、OssFactory#init

    在这里插入图片描述
    这个方法打印了日志,并且订阅了默认配置的通道。

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

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

    3.1、模拟集群配置 8080 | 8181

    目前的端口是 8080:
    在这里插入图片描述
    修改 idea 配置(我测试的版本是 2022.2):
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    配置完成后:
    在这里插入图片描述
    复制一个启动配置,设置启动端口号为 8181,并启动:
    在这里插入图片描述
    在这里插入图片描述
    8181 服务启动完成后,发布订阅消息,8080 服务就会接收到。

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

    在这里插入图片描述
    8080 服务启动后,如果没有进行任何 OSS 操作直接启动 8181,则 if 判断为 false,没有初始化 OssClient,换句话说,getClient(configKey) 获取到的对象为空,所以不会刷新配置。

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

    操作步骤:

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

    在这里插入图片描述
    刷新配置:
    在这里插入图片描述
    这里也是 new OssClient 再重新放到缓存里面。控制台打印:
    在这里插入图片描述
    如果不想启动两个服务也想看到效果的话,可以在配置管理里面新增默认配置或者修改默认配置的信息(注意是默认配置),也能进入 refresh 方法。

  • 相关阅读:
    技术管理进阶——谁能成为Leader,大Leader该做什么
    Python程序员常犯的编码错误(三)
    java计算机毕业设计健康饮食推荐系统MyBatis+系统+LW文档+源码+调试部署
    国开现代汉语专题,形考答案形考任务
    C++中执行shell命令,popen与system的区别
    SQLi靶场
    invalid use of incomplete type ‘class Ui::xxx‘
    uniapp使用华为云OBS进行上传
    LiveGBS国标GB/T28181视频平台作如何添加下级域配置设备单独注册密码接入控制白名单
    ORACLE集群管理-19C RAC重新配置IPV6
  • 原文地址:https://blog.csdn.net/Michelle_Zhong/article/details/126531914
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号