概述
上一节我们大概的了解了Soul网关是什么,搭建了运行环境并成功的运行了其中的soul-admin、soul-bootstrap模块。
这一节主要从以下几个方面开始学习
- 学习divide插件的使用
- 运行examples下面的http服务
- 使用divide插件,配置http的转发。
divide插件的使用
查看文档
首先我们找到Soul官方文档中关于divide插件的使用介绍
文档地址:https://dromara.org/zh-cn/docs/soul/plugin-divide.html
从文档中可以知道:
- divide插件是网关处理
http协议
请求的核心处理插件。 - 开启插件,
soul-admin
--> 插件管理-->divide
设置为启用。 - divide插件,配合如下 starter一起才能生效,具体请看:http用户。
<!--if you use http proxy start this-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-plugin-divide</artifactId>
<version>${last.version}</version>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-plugin-httpclient</artifactId>
<version>${last.version}</version>
</dependency>
插件讲解
- divide插件是进行http正向代理的插件,所有http类型的请求,都是由该插件进行负载均衡的调用。
- 选择器和规则,请详细看 : 选择器规则。
- http配置,是网关匹配到流量以后,真实调用的http配置,可以配置多个,设置负载均衡权重,具体的负载均衡策略,在规则中指定。
- 配置详解 :
- 第一个框:hostName,一般填写
localhost
,该字段暂时没使用。 - 第二个框:http协议,一般填写
http://
或者https://
,不填写默认为:http://
- 第三个框:ip与端口,这里填写你真实服务的 ip + 端口。
- 第四个框:负载均衡权重。
- 第一个框:hostName,一般填写
- ip + port 检测
- 在soul-admin 会有一个定时任务来扫描 配置的ip端口,如果发现下线,则会除该 ip + port
- 可以进行如下配置 :
- 配置详解 :
soul.upstream.check:true 默认为 ture,设置为false,不检测
soul.upstream.scheduledTime:10 定时检测时间间隔,默认10秒
运行examples下面的http服务
项目结构
配置
查看application.yml文件
查看pom
可以看到controller上加上了如下的注解
配置加载的源码分析
第一步:
加载 soul.http 的配置,初始化SoulSpringMvcConfig的bean
第二步:
SpringMvcClientBeanPostProcessor对bean进行后置处理
full参数为true直接返回bean
第三步:
初始化ContextRegisterListener bean,这时候会触发ContextRegisterListener 的onApplicationEvent事件
判断如果是full,构造请求参数注册到soul-admin
使用divide插件配置http代理
需要启动的服务
- soul-admin 端口9095
- soul-bootstrap 端口9195
- examples下的http服务 端口8188
http代理
这时候我们访问soul-admin的管理页面可以看到如下配置:
我们正常访问的http服务的order地址应该是:http://localhost:8188/order/findById?id=1
现在我们可以通过访问:http://localhost:9195/http/order/findById?id=1
负载
修改idea的启动配置,配置允许并行
修改端口再启动一个http服务,端口号:8189
修改配置
这时候我们看soul-admin的页面点击修改,会发现有两个配置规则
权重默认都是50,我们可以通过修改权重来控制每个服务的流量达到负载的效果。
请求过滤
我们也可以通过修改条件去过滤比如header中name=admin的请求才会代理
总结
Soul当然还支持例如熔断、限流、拦截等等的功能,这一节我们通过使用divide插件,简单的实现了代理的负载和过滤的功能,并分析了配置加载的部分源码,Soul巧妙的利用了SpringMVC的一些功能特性,优雅的实现了加载和注册的功能,能看出Soul的设计之精巧。
下一节我们主要学习examples中的apache-dubbo服务,通过学习文档,结合dubbo插件,发起http请求soul网关,体验dubbo代理的功能。