Soul(shenyu)网关-插件链

?

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

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

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

 

SoulConfiguration

Soul(shenyu)网关-插件链?

Soul(shenyu)网关-插件链

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

 

SoulWebHandler

构造器

Soul(shenyu)网关-插件链?

Soul(shenyu)网关-插件链


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

handle方法

Soul(shenyu)网关-插件链?

Soul(shenyu)网关-插件链


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

 

DefaultSoulPluginChain

Soul(shenyu)网关-插件链?

Soul(shenyu)网关-插件链

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

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

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

例如,进入divide插件中:

Soul(shenyu)网关-插件链?

Soul(shenyu)网关-插件链


如果不符合条件,则返回其他内容,如果符合条件,继续调用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)网关-插件链

上一篇:Photoshop打造甜美的秋季暖褐色外景人物图片


下一篇:BOM创建和修改