首页 > 其他 > 详细

Soul(shenyu)网关-插件链

时间:2021-09-02 01:30:37      阅读:10      评论:0      收藏:0      [点我收藏+]

?

 Soul(shenyu)网关很大的一个特色便是插件化思想,soul网关支持很多个插件,这些插件按照给定的顺序依次执行。

Soul所有的插件都实现SoulPlugin接口,插件链,也是执行一个个的SoulPlugin的实现类

插件链的执行在SoulWebHandler当中,进行代码分析

 

SoulConfiguration

技术分享图片?

技术分享图片

初始化了SoulWebHandler,将所有plugin按照order排序,调用SoulWebHandler的构造器

 

SoulWebHandler

构造器

技术分享图片?

技术分享图片


初始化插件集合,工作线程池

handle方法

技术分享图片?

技术分享图片


拦截所有请求,请求都会进入handle方法,调用了静态内部类DefaultSoulPluginChain中的方法

 

DefaultSoulPluginChain

技术分享图片?

技术分享图片

请求进来会执行DefaultSoulPluginChain的execute方法,请求上下文为参数,

方法中设置游标index,大小为插件的个数,每次执行方法后,游标加一,并且可以判断是否跳过插件。

execute是一个递归方法,在进入plugin.execute方法之后,传入了当前DefaultSoulPluginChain对象

例如,进入divide插件中:

技术分享图片?

技术分享图片


如果不符合条件,则返回其他内容,如果符合条件,继续调用chain.execute方法

假设divide插件为第一个插件,在进入这个插件之后,如果不满足条件,返回其他内容,则execute方法直接的到结果返回,否则,在divide插件中调用execute方法,此时index为0++之后的结果,即1,那么就获取到了下一个插件,一直递归下去,知道没有执行execute或者index等于plugins.size为止。

 

递归满足的是不断调用自身,且含有终点条件,execute方法是可以一直使用DefaultSoulPluginChain对象,一直调用execute方法下去,而终点条件便是index或者某个插件直接返回了内容。

 

soul的插件链,使用SoulWebHandler实现WebHandler,拦截所有到达soulbootstrap的请求,并递归执行DefaultSoulPluginChain的execute方法,知道达到终点条件为止。

?

Soul(shenyu)网关-插件链

原文:https://www.cnblogs.com/sewell/p/15212223.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!