Soul源码总结-01-15

预期目标

  • 运行examples下面的 http服务
  • 学习文档,结合divde插件,发起http请求soul网关,体验http代理
  • 记录心得并总结

http服务的发现与注册

demo

启动soul-admin以及soul-bootstrap后打开控制台,发现divide插件默认开启,但是selectorList和pluginList是空。但是如果启动soul-examples-http下的测试实例,会发现selectorList和pluginList会自动添加配置好的selector和rule, 结果如下:
在这里插入图片描述
那么新启动的http服务是如何被soul-admin发现并注册呢?

源码追踪

我们可以看到SoulTestHttpApplication控制台中打印出的日志如下:
在这里插入图片描述
说明在启动阶段会http client会自动注册相关的服务到soul-admin, 通过打断点我们发现其实在RegisterUtils中通过doRegister方法调用OkHttpClient向http://localhost:9095/soul-client/springmvc-registerpost相应的selector和rule,同时在soul-admin中调用soulClientRegisterService将要注册服务的元数据存储在本地mysql数据库。如果我们查看rule_condition表会发现以下数据:
在这里插入图片描述
说明soul-admin已经将http服务中的相关信息已经持久化到数据库。
但是doRegister方法是如何被调用已经相关服务方法是如何被soul-admin感知呢?
我们在示例项目中的controller中会发现这样的注解@SoulSpringMvcClient,这就意味着soul网关会自动扫描该注解,并将其添加到我们的规则中:

@SoulSpringMvcClient(path = "/test/**")
@SoulSpringMvcClient(path = "/order")
@SoulSpringMvcClient(path = "/save" , desc = "Save order")
....

同时在实例项目的application.yml中写上相应的配置:

soul:
  http:
    adminUrl: http://localhost:9095 //目标soul-admin的url
    port: 8188 // 本应用的端口号
    contextPath: /http // 路由前缀名
    appName: http // 本应用的名称
    full: false

这样就能保证相关http服务能够被soul-admin感知并发现。
如果我们接着追踪,会发现在org.dromara.soul.client.springmvc.init包下的SpringMvcClientBeanPostProcessor覆写了postProcessAfterInitialization并调用doRegister方法
在这里插入图片描述
同时在buildJsonParams方法中对路由进行拼接并转换成json String, 最后被post到soul-admin的soul-client/springmvc-registerendpoint.

测试网关

我们使用示例方法中的findByUserId对网关进行测试。使用网关访问http://127.0.0.1:9195/http/test/findByUserId?userId=123456, 在SoulBootstrapApplication控制台看到以下日志:
在这里插入图片描述
根据日志我们可以定位到org.dromara.soul.plugin.httpclient包中的execute方法,将路由进行拆解,提取并转发到对应的http服务。

在这里插入图片描述

总结

  • http服务的发现与注册:
    • 如果http服务是SpringWeb,SpringBoot, 或者SpringCloud项目, 可以通过@SoulSpringMvcClient注解并且在配置文件中配置soul网关的相关信息即可实现服务的发现与注册,并且在soul-admin中显示出来。
    • 如果是非java项目,可以直接在soul-admin中手动天界selector以及相关的rule
  • selector,rule的匹配以及路由转发
    • 目前是由WebClientPlugin来handle路由转发,但具体soul网关是如何调用AbstractSoulPlugin以及SoulPluginChain是如何被handle需要进一步探索。

猜你喜欢

转载自blog.csdn.net/qq_42965594/article/details/112691255