初探Soul网关week02_02

360 阅读1分钟

前言

现在是周五21:06分,我没有躺在家里的🛏️上玩手机,而是在公司的破💺上码字

soul的请求转发

前几天玩soul的功能的时候就有个疑问:我明明请求的是 bootstrap 的端口 9195http://localhost:9195/http/order/findById?id=36),为啥他知道要请求soul-examples-http的端口8189 (http://127.0.0.1:8189/order/findById?id=36)

猜他是在内部偷偷地做了请求的转发,在这个过程中顺便做了负载均衡

小💻没有电了,白天接着码

继续...

因为用的是divide插件,所以功能应该与DividePlugin相关 图:请求进入DividePlugin的快照

分析一波调用栈(上图左下角):AbstractSoulPluginSoulHandler出现在调用栈上

AbstractSoulPlugin execute() 方法 开头处打一个断点

图:请求进入AbstractSoulPlugin的快照

Soul 默认有14种插件,每个插件都要进入AbstractSoulPlugin进行判断,匹配成功的插件可以继续向下执行选择器 规则,没有成功的插件就将事件传给下一个插件

上图是在判断divide 插件(id为6),因为

if (pluginData != null && pluginData.getEnabled()) // 判断为true

所以走到了开始提起的DividePlugin 的 doExecute() 方法,在这个方法里实现了从网关到提供服务后端的请求转发

图:请求转发的快照

在上图中:soulContext的路径还是 /http/order/findById 执行到upStreamList的路径就是 127.0.0.1:8189 了

soul 的负载均衡

图:soul实现实现负载均衡的地方