soul源码阅读(十一)soul helloworld插件自定义

目录

 

插件职责介绍

自定义插件

编写soul-plugin-helloworld

编写soul-spring-boot-starter-plugin-helloworld

soul-bootstrap配置

soul-admin配置

测试

彩蛋爆料


插件职责介绍

  • 插件是 soul 网关的核心执行者,每个插件在开启的情况下,都会对匹配的流量,进行自己的处理。

  • 在soul 网关里面,插件其实分为2 类:

    • 一类是单一职责的调用链,不能对流量进行自定义的筛选。

    • 另一类,能对匹配的流量,执行自己的职责调用链。

以上是从官网引用的几句话,那么今天我们来自定义一个能够匹配流量的插件。

自定义插件

编写soul-plugin-helloworld

在soul-plugin模块下新增一个模块soul-plugin-helloworld,按照插件统一风格,新建包org.dromara.soul.plugin.helloworld,然后在该包下新建HelloWorldPlugin.java。

HelloWorldPlugin实现AbstractSoulPlugin,重写doExcute,getOrder,named,skip四个方法。

doExcute:自定义插件要执行的逻辑,这里我们做一个很简单的事情,就是通过日志打印一行hello world。

getOrder:插件链执行的顺序,这里我们定义10,排在globalPlugin后面即可。

named:指定插件的名称。

skip:是否被跳过执行,这里我们直接指定死不被跳过,当然可以自行实现逻辑,满足什么条件下可以被跳过。

编写soul-spring-boot-starter-plugin-helloworld

在soul-spring-boot-starter模块下,新建soul-spring-boot-starter-plugin-helloworld模块,模块结构如上图所示。

HelloWorldPluginConfiguration.java文件内容如上图所示,其实就是将我们写好的HelloWorldPlugin注册交给spring管理,当然文件是需要加一个@Configuration,这是配置文件的注解,spring启动后默认会去加载这个注解下的文件内容。

pom.xml文件引入

spring.factories文件需要指定配置文件。

spring.provides文件执行模块名。

以上几个文件是spring-boot-starter的基本写法,不太了解的可以百度下做进一步了解。

soul-bootstrap配置

soul-bootstrap模块的pom.xml文件引入我们写好的starter,soul-spring-boot-starter-plugin-helloworld,一切准备就绪,是不是启动它就可以用了?

soul-admin配置

我们插件链里边的抽象模板的excute方法是有做插件数据以及开关的判断的,所以我们需要打开admin页面配置一个插件,并且打开开关。

开关设置好了,由于我们自定义实现的是流量控制插件,所以,我们刷新下页面,发现插件列表里已经多了我们自定义的helloworld插件了。

然后配置下选择器以及选择器规则。

一切准备就绪,启动后台网关。

测试

restclient工具请求http://localhost:9195/helloworld/findById,返回结果如下:

至此简易版的自定义流量插件完成,在了解插件流程的基础上,自定义下加深下了解,也有助于后面给soul处理issue贡献些力量打下基础。

彩蛋爆料

编译的时候其实出现了蛮多问题哈,有boot-starp启动报错的问题,有检查规范的问题,有报包引入错误的问题,看错误日志输出,尝试解决即可哈。

编译打包报错:用mvn clean install -DskipTests -Drat.skip=true

检查规范报错:根据提示处理即可。

软件包名称与目录不同问题:新建一个包,发现没有被检测同名,截图如下:

还没找出什么原因,最后将旧的包给去掉,用新建的包即可。

其他问题:可检查下相关文件配置是不是正确的,如笔者第一次spring.factories就配置错误,然后好像提示了啥错误,有点印象模糊了。

猜你喜欢

转载自blog.csdn.net/he_cha_bu/article/details/113072322