今日目标
运行examples下面的 http服务
学习文档,结合divde插件,发起http请求soul网关,体验http代理
环境运行
启动
soul-admin 管理端 http://localhost:9095/
soul-bootstrap 网关 http://localhost:9195/
soul-examples-http http服务 http://localhost:8188/ (在soul-examples模块下,将soul-examples添加到soul的pom.xml中使IDE可以识别)
soul-examples-http是soul自带的样例,如果是自己的项目如何集成呢,可以参考官方文档对http用户集成的介绍 https://dromara.org/zh-cn/docs/soul/user-http.html
功能测试
根据对网关的理解,本次启动的三个模块之间的关系应该是:
- soul-examples-http提供原始http服务
- soul-bootstrap提供了对soul-examples-http的代理,可以通过访问soul-bootstrap来访问soul-examples-http提供的服务
- soul-admin提供了对网关的配置,应该包括了代理的规则
插件启用及配置
soul网关使用 divide 插件来处理http请求,访问管理端的插件配置(http://localhost:9095/#/system/plugin),启用divide插件
查看插件列表里divide的配置,有点神奇,昨天只启动soul-admin和soul-bootstrap的时候,这里还是没有配置的,应该是soul-examples-http启动的时候自动同步过来的,这个同步的机制后面再研究(遗留问题1)
请求访问
用户请求
说白了,你之前怎么请求就怎么请求,没有很大的变动,变动的地方有2点。
第一点,你之前请求的域名是你自己的服务,现在要换成网关的域名 (这个你听的懂?)
第二点,soul网关需要有一个路由前缀,这个路由前缀就是你接入项目进行配置
contextPath
,如果熟的话,可以自由在soul-admin
中的divide插件进行自由更改.# 比如你有一个 order服务 它有一个接口,请求路径 http://localhost:8080/test/save
# 现在就需要换成:http://localhost:9195/order/test/save
# 其中 localhost:9195 为网关的ip端口,默认端口是9195 ,/order 是你接入网关配置的 contextPath
# 其他参数,请求方式不变。
# 我讲到这里还不懂? 请加群问吧
然后你就可以进行访问了,如此的方便与简单。
1.访问原始http服务 http://localhost:8188/test/findByUserId?userId=1
2.替换网关地址 http://localhost:9195/http/test/findByUserId?userId=1
返回结果
查看soul-bootstrap日志
遗留问题分析
原始http服务启动时如何将代理规则同步到管理端的
在http服务的controller上有一个注解的配置
@SoulSpringMvcClient(path = "/test/**")
管理端对应的配置如下
通过查找对SoulSpringMvcClient的处理逻辑,找到了soul-client-springmvc中的SpringMvcClientBeanPostProcessor
该类实现了BeanPostProcessor接口,postProcessAfterInitialization方法中实现了扫描带有SoulSpringMvcClient注解的类及方法,并通过RegisterUtils.doRegister对配置数据进行注册
RegisterUtils.doRegister内部通过http post的方式进行注册