Soul网关(二)---- divide 插件代理 HTTP 请求

本文详细介绍了Soul网关如何通过divide插件处理HTTP请求,包括启动配置、选择器与规则的设定,以及HTTP请求代理的测试。核心流程涉及divide插件的启动、配置管理、负载均衡算法和本地缓存管理。通过soul-admin配置选择器和规则,实现了流量的精细化管理。此外,还解析了divide插件的源码结构,展示了HTTP请求从匹配到转发的过程。
摘要由CSDN通过智能技术生成

soul-examples-http

运行examples下面的 http服务
启动 soul-examples-http,默认端口 8188,可以看到启动时的日志:
在这里插入图片描述

divide 插件

divide插件是网关处理 HTTP 请求的核心处理插件。

divide插件是进行http正向代理的插件,所有http类型的请求,都是由该插件进行负载均衡的调用。

选择器和 规则

选择器和规则是soul网关中最灵魂的东西。掌握好它,你可以对任何流量进行管理。

通俗易通的解释:一个插件有多个选择器,一个选择器对应多种规则。选择器相当于是对流量的第一次筛选,规则就是最终的筛选

使用 divide 插件进行 HTTP 请求代理

需要启动 soul-bootstrap、soul-admin、soul-examples-http

启动 soul-bootstrap 后可以看到会有输出日志:

websocket reconnection is error.....

这时候我们再把 soul-admin 也启动,日志输出:

websocket reconnect is successful.....

这说明 soul-bootstrap 通过 websocket 与 soul-admin进行连接。

1 在 soul-admin 将 divide 打开

首先在 soul-admin 启动 divide 插件,启动后可以看到这里也是 open 状态

在这里插入图片描述

点击 Editor 可以看到,有个按钮可以 开启/关闭 插件,这里需要确保 divide 是打开状态

在这里插入图片描述

2 在 soul-admin 配置一个选择器

请求URL 如果模糊匹配到了 /dividePluginTest ,流量就会匹配上刚创建的这个选择器。(match : 模糊匹配,建议和uri条件搭配,支持 restful风格的匹配。(/dividePluginTest/**))

在这里插入图片描述

那么这个选择器就进行了第一道流量的筛选,/dividePluginTest/** 这种请求才会被过滤出来。接下来配置一个或多个规则,当流量经过选择器匹配成功之后,会进入规则来进行最终的流量匹配。

3 在 soul-admin 给选择器配置一个或多个规则

这条规则会匹配上请求URL 为 /dividePluginTest/test 的流量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-354BvMSJ-1610730277973)(:storage/902945c9-da48-4a35-a0b3-b6f462c26f19/ae21c487.png)]

4 测试 HTTP 请求代理

选择器和规则都设置好了,接下来对 HTTP 请求进行简单的测试,看看配置的选择器和规则是否生效。按照预期,请求 URL为 /dividePluginTest/test 的流量会匹配上,然后被转发到 127.0.0.1:8080。

1)请求 http://localhost:9195/AAAAAA/aaaaa 会返回 ‘找不到相应的选择器’
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2Z7itVF2-1610730277974)(:storage/902945c9-da48-4a35-a0b3-b6f462c26f19/e1ec6cac.png)]

2)请求 http://localhost:9195/http/BBB 会返回‘没有对应的规则’。因为我们默认是有个模糊匹配 /http 的选择器的,但是没有匹配 /BBB 的规则。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uFKs3u6o-1610730277974)(:storage/902945c9-da48-4a35-a0b3-b6f462c26f19/1b59eae0.png)]

3)请求 http://localhost:9195/http/order/findById?id=111 ,匹配上了,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vp8qnaBM-1610730277975)(:storage/902945c9-da48-4a35-a0b3-b6f462c26f19/7936cfc0.png)]

请求被转发到 http://192.168.3.2:8188/order/findById

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kkgzwsty-1610730277975)(:storage/902945c9-da48-4a35-a0b3-b6f462c26f19/434d7049.png)]

接下来测试我们自己配置的选择器( 模糊匹配/dividePluginTest/**) 和 规则 (精确匹配 /dividePluginTest/test)

4)请求 http://localhost:9195/dividePluginTest/hahahahah ,返回找不到规则,但是选择器匹配上了,结果符合预期。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E9iqs52o-1610730277976)(:storage/902945c9-da48-4a35-a0b3-b6f462c26f19/f671ef17.png)]

5)请求 http://localhost:9195/dividePluginTest/test ,请求被选择器和规则匹配上,并转发到了 127.0.0.1:8080 ,结果符合预期。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TPUEaTGK-1610730277976)(:storage/902945c9-da48-4a35-a0b3-b6f462c26f19/05484ee8.png)]

看 soul-bootstrap 的日志,也可以看到请求 URL 被成功匹配

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mfZQxMzu-1610730277977)(:storage/902945c9-da48-4a35-a0b3-b6f462c26f19/905552fc.png)]

divide 插件源码结构

├── DividePlugin.java(请求的转发)
├── balance(HTTP 请求的负载均衡算法的实现)
│   ├── LoadBalance.java
│   ├── spi
│   │   ├── AbstractLoadBalance.java
│   │   ├── HashLoadBalance.java
│   │   ├── RandomLoadBalance.java
│   │   └── RoundRobinLoadBalance.java
│   └── utils
│       └── LoadBalanceUtils.java
├── cache(本地缓存管理)
│   └── UpstreamCacheManager.java
├── handler(把选择器跟请求过滤规则同步到本地缓存)
│   └── DividePluginDataHandler.java
└── websocket
    └── WebSocketPlugin.java

总结

Soul网关通过 divide 插件来处理 HTTP 请求,所以 Soul 网关 soul-bootstrap 的 pom 文件中需要添加以下两个 starter 的依赖:

<!--if you use http proxy start this-->
   <dependency>
       <groupId>org.dromara</groupId>
       <artifactId>soul-spring-boot-starter-plugin-divide</artifactId>
       <version>2.2.0</version>
   </dependency>

   <dependency>
       <groupId>org.dromara</groupId>
       <artifactId>soul-spring-boot-starter-plugin-httpclient</artifactId>
       <version>2.2.0</version>
   </dependency>

另外,插件通过 soul-admin 进行管理, 所以还需要启动 soul-admin 并确保 divide 插件为开启状态。

HTTP请求先走 divide 插件,如果请求最终被选择器和规则匹配上了,就会转发到选择器中配置的对应的 ip:port

思考

  1. Soul 网关对 HTTP 请求的限流规则的配置非常灵活与简便。在 soul-admin 配置好选择器和规则,就可以对 HTTP 请求进行过滤和限制,相比 Spring Cloud Gataway来说,这一点要方便不少,Soul 有点 Spring Cloud Gataway + 配置中心 的感觉
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值