目录
编写soul-spring-boot-starter-plugin-helloworld
插件职责介绍
-
插件是 soul 网关的核心执行者,每个插件在开启的情况下,都会对匹配的流量,进行自己的处理。
扫描二维码关注公众号,回复: 12653150 查看本文章 -
在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就配置错误,然后好像提示了啥错误,有点印象模糊了。