体验基础的http代理功能
1、启动 soul-examples 下面的 SoulTestHttpApplication
2、我们可以通过url直接访问 http://localhost:8188/order/findById?id=1
{"id":"1","name":"hello world findById"}
3、如果是通过 http代理访问的话,使用 soul-bootstrap 的http转发服务 http://localhost:9195/http/order/findById?id=1
{"id":"1","name":"hello world findById"}
返回如上的内容,说明http转发是已经成功了
4、可以看到 soul-admin 下面的 divide 插件新增了一些数据
- 选择器:对应一个独立启动的应用
- 名称:选择器名称
- 类型:
- customer:个性化匹配
- full:全局匹配
- 匹配方式(只有customer的时候有):
- and:下面所有条件都要满足
- or:下面所有条件满足其一即可
- 条件:分为url,post,query,host,ip,header
- 条件符号:match,=,regEx,like
- 继续后续选择器:暂时不知道什么用
- 打印日志:是否打印日志
- 是否开启:明面上意思
- 配置(映射后端被代理的配置):
- host:被代理的host
- protocol:协议
- ip:port:对应映射的ip和端口
- weight:权重
- startupTime:启用延时
- warmupTime:暂时不知道是什么
- open/close:当前配置是否启用
- 执行顺序:第几个执行
- 规则(接口匹配):
- 名称:规则名称
- 匹配方式:
- and:下面所有条件都要满足
- or:下面所有条件满足其一即可
- 条件
- and:下面所有条件都要满足
- or:下面所有条件满足其一即可
- 负载均衡策略:
- hash:hash(不知道默认hash是什么??)
- random:随机
- roundRobin:轮询
- 打印日志:是否打印日志
- 是否开启:当前规则是否开启
- 执行顺序:多个规则的时候顺序
实验:
1、选择器类型 full,全部url都会通过该选择器,提示如下
{"code":-102,"message":"Rule not found!","data":null}
没有配置规则,我们配置下规则
老样子,访问 http://localhost:9195/httpfull/order/findById?id=1
{"id":"1","name":"hello world findById"}
代理成功
2、尝试权重规则
修改 soul-examples-http 可以运行多个,勾选下 allow parallel run
application.yml 新增运行端口 8189
server:
port: 8189
address: 0.0.0.0
增加配置,8189给99的权重,这样流量都会走8189过
因为之前加了全局的,执行顺序也是1,导致走httpfull那边过了,这个执行顺序之后是否考虑可以优化下;两个都是1的情况下好像暂时不知道调用的是哪个
调用的时候还有下面的警告,之后看看是什么原因
2021-01-15 23:30:17.511 INFO 3392 --- [-work-threads-1] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http
2021-01-15 23:30:17.512 INFO 3392 --- [-work-threads-1] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match , selector name :/http/order/findById
2021-01-15 23:30:17.517 INFO 3392 --- [-work-threads-1] o.d.s.plugin.httpclient.WebClientPlugin : The request urlPath is <http://127.0.0.1:8189/order/findById?id=1>, retryTimes is 0
2021-01-15 23:30:17.639 WARN 3392 --- [-work-threads-1] io.netty.bootstrap.Bootstrap : Unknown channel option 'SO_TIMEOUT' for channel '[id: 0x9cfe66f1]'
目前先这样,http调用了解了下,后续可以补充其他用法的尝试。
之后可以对http调用的整个流程进行debug。
疑问点:
以及关于上面权重的问题是否是一个可以优化的点?
startupTime:启用延时
warmupTime:暂时不知道是什么,调大是一下
继续后续选择器:暂时不知道什么用
负载均衡的hash规则是怎样的