Soul网关02-使用divide插件实现http代理

 

概述

上一节我们大概的了解了Soul网关是什么,搭建了运行环境并成功的运行了其中的soul-admin、soul-bootstrap模块。

 

这一节主要从以下几个方面开始学习

  1. 学习divide插件的使用
  2. 运行examples下面的http服务
  3. 使用divide插件,配置http的转发。

 

divide插件的使用

 

查看文档

首先我们找到Soul官方文档中关于divide插件的使用介绍

文档地址:https://dromara.org/zh-cn/docs/soul/plugin-divide.html

从文档中可以知道:

  • divide插件是网关处理 http协议请求的核心处理插件。
  • 开启插件, soul-admin --> 插件管理--> divide 设置为启用。
  • divide插件,配合如下 starter一起才能生效,具体请看:http用户。
  
   
       org.dromara
       soul-spring-boot-starter-plugin-divide
       ${last.version}
   


   
       org.dromara
       soul-spring-boot-starter-plugin-httpclient
       ${last.version}
   

 

插件讲解

  • divide插件是进行http正向代理的插件,所有http类型的请求,都是由该插件进行负载均衡的调用。
  • 选择器和规则,请详细看 : 选择器规则。
  • http配置,是网关匹配到流量以后,真实调用的http配置,可以配置多个,设置负载均衡权重,具体的负载均衡策略,在规则中指定。
    • 配置详解 :
      • 第一个框:hostName,一般填写 localhost,该字段暂时没使用。
      • 第二个框:http协议,一般填写 http:// 或者 https:// ,不填写默认为:http://
      • 第三个框:ip与端口,这里填写你真实服务的 ip + 端口。
      • 第四个框:负载均衡权重。
    • ip + port 检测
      • 在soul-admin 会有一个定时任务来扫描 配置的ip端口,如果发现下线,则会除该 ip + port
      • 可以进行如下配置 :

 

      soul.upstream.check:true  默认为 ture,设置为false,不检测
      soul.upstream.scheduledTime:10  定时检测时间间隔,默认10秒

 

 

运行examples下面的http服务

 

项目结构

Soul网关02-使用divide插件实现http代理_第1张图片

 

 

配置

查看application.yml文件

Soul网关02-使用divide插件实现http代理_第2张图片

 

查看pom

Soul网关02-使用divide插件实现http代理_第3张图片

可以看到controller上加上了如下的注解

Soul网关02-使用divide插件实现http代理_第4张图片

 

 

配置加载的源码分析

第一步:

加载 soul.http 的配置,初始化SoulSpringMvcConfig的bean

Soul网关02-使用divide插件实现http代理_第5张图片

 

第二步:

SpringMvcClientBeanPostProcessor对bean进行后置处理

full参数为true直接返回bean

Soul网关02-使用divide插件实现http代理_第6张图片

 

第三步:

初始化ContextRegisterListener bean,这时候会触发ContextRegisterListener 的onApplicationEvent事件

Soul网关02-使用divide插件实现http代理_第7张图片

判断如果是full,构造请求参数注册到soul-admin

Soul网关02-使用divide插件实现http代理_第8张图片

 

 

使用divide插件配置http代理

 

需要启动的服务

  • soul-admin 端口9095
  • soul-bootstrap 端口9195
  • examples下的http服务 端口8188

 

http代理

这时候我们访问soul-admin的管理页面可以看到如下配置:

Soul网关02-使用divide插件实现http代理_第9张图片

我们正常访问的http服务的order地址应该是:http://localhost:8188/order/findById?id=1

Soul网关02-使用divide插件实现http代理_第10张图片

 

现在我们可以通过访问:http://localhost:9195/http/order/findById?id=1

 

Soul网关02-使用divide插件实现http代理_第11张图片

 

负载

修改idea的启动配置,配置允许并行

Soul网关02-使用divide插件实现http代理_第12张图片

 

修改端口再启动一个http服务,端口号:8189

修改配置

Soul网关02-使用divide插件实现http代理_第13张图片

 

这时候我们看soul-admin的页面点击修改,会发现有两个配置规则

Soul网关02-使用divide插件实现http代理_第14张图片

 

Soul网关02-使用divide插件实现http代理_第15张图片

 

权重默认都是50,我们可以通过修改权重来控制每个服务的流量达到负载的效果。

 

 

请求过滤

我们也可以通过修改条件去过滤比如header中name=admin的请求才会代理

Soul网关02-使用divide插件实现http代理_第16张图片

 

 

总结

Soul当然还支持例如熔断、限流、拦截等等的功能,这一节我们通过使用divide插件,简单的实现了代理的负载和过滤的功能,并分析了配置加载的部分源码,Soul巧妙的利用了SpringMVC的一些功能特性,优雅的实现了加载和注册的功能,能看出Soul的设计之精巧。

下一节我们主要学习examples中的apache-dubbo服务,通过学习文档,结合dubbo插件,发起http请求soul网关,体验dubbo代理的功能。

 

 

你可能感兴趣的:(Soul网关-源码分析)