soul学习初识divide插件

2024-03-25 21:59
文章标签 初识 学习 插件 soul divide

本文主要是介绍soul学习初识divide插件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先梳理下经过divide插件的大致执行流程

  • 直接看bootstrap日志
    在这里插入图片描述
猜测 :AbstractSoulPlugin,WebClientPlugin 是入口,
public abstract class AbstractSoulPlugin implements SoulPlugin 
public class WebClientPlugin implements SoulPlugin
他们的顶层接口是 SoulPlugin
  • 如日志日志可以看出两个插件的顺序
  • 将断点加入到两个plugin的execute 方法
    在这里插入图片描述
  • 查看调用栈(就如图两处,其余都内部调用)
    在这里插入图片描述
  • 看了下代码具体细节没太懂,根据参数以及代码猜测是根据启插件的开启状态丢到不同的插件处理类里面(需要补充下webflux相关知识
  • 看到这里知道了主要头尾经过那些类,可以直接根据找我们今天要看的主题divide插件的处理实现过程
    在这里插入图片描述
  • DividePlugin#doExecute()方法

在这里插入图片描述

  • 直接上断点先看看里面都操作了啥
大致debug一边意思是把请求丢进插件链里面对开启状态的插件挨个处理
  • 在这里看到了soul-admin里面的plugins,selector,rule 以及相关conditions 数据
  • 数据如何同步过来后续深入了解soul的几种同步数据的方式 todo
  • 具体每个插件对应的对请求的处理代码如下 也就是chain.execute()方法
      @Overridepublic Mono<Void> execute(final ServerWebExchange exchange) {return Mono.defer(() -> {if (this.index < plugins.size()) {SoulPlugin plugin = plugins.get(this.index++);Boolean skip = plugin.skip(exchange);if (skip) {return this.execute(exchange);}return plugin.execute(exchange, this);}return Mono.empty();});}
  • 继续向下针对divide 插件的的请求体处理是 WebClientPlugin 进行处理也正是我们文章开始日志后面输出的类
  • 如何处理请求body以及发送,响应过程 后面继续分析

总结

  1. 目标熟悉divide插件在网关中的大致执行流程
  2. 先从网关日志着手看头尾两部分断点先走一波
  3. 从类名方法名大致猜测每个类以及方法的作用
  4. 断点印证猜测
  5. 从代码结构看到了很多设计设计模式的具体应用,责任链模式,模板方法,等。后续在自己的代码中多尝试。

这篇关于soul学习初识divide插件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/846365

相关文章

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

maven中的maven-antrun-plugin插件示例详解

《maven中的maven-antrun-plugin插件示例详解》maven-antrun-plugin是Maven生态中一个强大的工具,尤其适合需要复用Ant脚本或实现复杂构建逻辑的场景... 目录1. 核心功能2. 典型使用场景3. 配置示例4. 关键配置项5. 优缺点分析6. 最佳实践7. 常见问题