概述
今日目标
了解http代理过程。
探索过程
启动admin, bootstrap和http example,用postman发起如下GET请求:
http://127.0.0.1:9195/http/test/findByUserId?userId=1
bootstrap打印如下日志:
INFO 42752 --- [-work-threads-9] o.d.soul.plugin.base.AbstractSoulPlugin
: divide selector success match , selector name :/http
INFO 42752 --- [-work-threads-9] o.d.soul.plugin.base.AbstractSoulPlugin
: divide rule success match , rule name :/http/test/**
INFO 42752 --- [-work-threads-9] o.d.s.plugin.httpclient.WebClientPlugin
: The request urlPath is http://26.26.26.1:8188/test/findByUserId?userId=1, retryTimes is 0
日志中可以看出,通过AbstractSoulPlugin插件识别到选择器和规则,以及最终得到实际服务的url,查找日志中对应类的函数调用情况,可以定位到客户端请求到达soul网关的最初入口(从spring web传给soul入口),入口是org.dromara.soul.web.handler.SoulWebHandler.handle(ServerWebExchange)
。
从上述入口进行代码跟踪,发现在如下位置调用各个插件进行相关的过滤和处理:
org.dromara.soul.web.handler.SoulWebHandler.DefaultSoulPluginChain.execute(ServerWebExchange)
对应函数体如下:
public Mono<Void> execute(final ServerWebExchange exchange) {
return Mono.defer(() -> {
if (this.index < plugins.size()) {
SoulPlugin plugin = plugins.get(this.index++);
Boolean skip = plugin.skip(exchange);
if (skip) {
return this.execute(exchange);
}
return plugin.execute(exchange, this);
}
return Mono.empty();
});
}
在这里会过一遍所有的插件,每个插件都有一个orderId,表示插件处理的顺序,WebClientPlugin的orderid是divide插件id加一,说明WebClientPlugin插件处理排在divide插件处理之后,实际也是在WebClientPlugin中就将客户端请求转到对应的服务上去。
感想
看代码过程中,对响应式编程不是很理解,造成代码阅读有点困难,这一块需要尽快补上,并争取落实到自己平时的编码中。
最后
以上就是暴躁月饼为你收集整理的soul网关案例学习:http代理大致流程的全部内容,希望文章能够帮你解决soul网关案例学习:http代理大致流程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复