前言
昨晚是新🏠的第一晚,十分钟从公司到家的感觉真是爽爆了,但是昨晚看代码不是很顺利
今天又是6点起床的一天
请求转发
使用Soul的功能的功能时有一个疑问,访问目标明明是8189端口的服务,但是实际的请求是发向了9195端口,这中间经历了什么?先从程序的入口开始找起
Soul的核心功能是通过插件实现的,找到 divide 插件,打断点,debug
图:断点执行情况
在Soul这个项目内,能触碰的最底层代码在上图红色箭头3的位置。Mono.defer() (响应式编程的内容)暂时还看不懂,不过不影响接下来的分析
图:红色箭头3的具体内容
在红色箭头3处,
return plugin.execute(exchange, this);
执行插件,因为Soul的核心功能跟插件直接相关,所以重点关注插件的来源,可以看到excute方法中plugins的来源只有DefaultSoulPluginChain的构造函数,而DefaultSoulPluginChain构造函数中plugins的来源只有SoulWebHandler的成员变量
plugins变量大概的关系:
excute方法 --> DefaultSoulPluginChain的构造函数 -->SoulWebHandler的成员变量 --> bootstrap(网关) 初始化时spring IOC 装配加载
图:初始化 SoulConfiguration 中 SoulWebHandler