springcloud ,divide插件都能跑通了,现在就看下请求是如何转发的。
从调用栈可以看到,程序进来的入口类是 SoulWebHandler。
后面在 AbstractSoulPlugin 中,遍历 plugin list,一个个去调用开启的插件。这就是传说中的责任链模式了。责任链模式是行为型设计模式的一种,为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。一般每个接收者包含对另一个接收者的引用,如果一个对象不能处理该请求,那么会将请求传递给下一个接收者。
可以看到 chain 上面绑定了好几层。
这里就是一个个去执行插件。
这个 skip 方法,每个插件也是有自己的内部实现。如果 skip 为true,就去执行下一个插件,否则在当前插件执行。这里判断 DividePlugin 就是 rpcType 需要是 HTTP 的。