soul网关学习day03

 

今日目标

运行examples下面的 apache-dubbo服务

学习文档,结合dubbo插件,发起http请求soul网关,体验dubbo代理

 

环境运行

启动

soul-admin

soul-bootstrap

soul-examples-apache-dubbo-service (运行 TestApacheDubboApplication)

zookeeper (用于dubbo注册中心,windows下安装参考 https://blog.csdn.net/qq_33316784/article/details/88563482)

 

soul源码中自带的examples已添加好了必需的依赖和配置,自己集成可参考文档 https://dromara.org/zh-cn/docs/soul/user-dubbo.html

 

功能测试

插件启用及配置

启用dubbo插件并配置注册中心地址,这里有个小插曲,soul支持mysql和h2两种数据库启动,h2的初始化数据里少了部分元数据配置,其中包括dubbo插件的编辑字段配置,因此使用h2启动的我,打开dubbo的编辑界面并没有register字段可以填写,补充了元数据之后问题解决。

soul网关学习day03_第1张图片

查看dubbo的路由规则,与上次启动http模块一样,代理规则自动注册到了管理端

soul网关学习day03_第2张图片

去soul-examples-apache-dubbo-service启动的日志里查看,可以看到自动注册的日志

soul网关学习day03_第3张图片

 

请求访问

soul网关学习day03_第4张图片

从代理路径中选择一个访问

http://localhost:9195/dubbo/findById?id=1

 

返回结果

访问代理成功

 

 

源码分析

请求如何转发的

通过上次运行通过divid转发http请求和本次apach-dubbo转发dubbo请求,模式都是在管理端启用一个插件并配置对访问路径的代理规则,然后访问网关地址请求就被转发到原始的http与dubbo服务了,那么这个转发是如何实现的呢?

回头看一下soul的架构图

soul网关学习day03_第5张图片

大致的流程是这样的,访问请求到达网关的集群,集群通过配置找到对应的插件+规则处理请求,红框部分就是divid和dubbo的转发方式,dubbo是通过泛化调用的方式将前端进入的http请求转化成对dubbo服务的访问的。

从转发dubbo请求时打印的日志selector success match入手 ,查找到AbstractSoulPlugin,从下图的代码结构看,这个类属于soul-plugin-base,大模块属于soul-plugin

soul-plugin : Soul 支持的插件集合

 

soul网关学习day03_第6张图片

 

在AbstractSoulPlugin中找到执行了selectorLog的地方,看起来是通过execute方法执行统一的插件匹配,并触发执行逻辑,看起来是使用了模板方法,详情后续分析

soul网关学习day03_第7张图片

 

 

 

 

你可能感兴趣的:(学习,网关)