之前有用过一次,但没有整理忘记了,今天又是很狗的一天,所以记录一下,不做重复工作。
关于版本的问题,没有太多坑,SpringBoot,SpringCloud,SpringAlibaba,这三个版本统一适配就可以了。版本适配可以参考(遵守即可):版本发布说明 | https://sca.aliyun.com
1-LInux / Windows安装Sentinel Dashboard(控制台),下载地址:Releases · alibaba/Sentinel (github.com)
具体流程就不赘述了
docker安装一行搞定,最新版本则去掉冒号及后边的,其他版本则修改最后的版本号即可,示例为1.8.3.
这行命令是用来运行镜像的,会有人问了,镜像还没search,也没有pull,怎么直接就run了呢?这是个偶然发现的,执行之后会Error,别着急,然后会自动去pull镜像,然后run,一键启动了,哈哈哈。
docker run -d -p 8858:8858 -p 8719:8719 --restart=always bladex/sentinel-dashboard:1.8.3
Sentinel Dashboard就到这里了,应该没啥问题了。
2-重中之重,Java代码模块的。
创建一个Gateway项目,整合其他网关也可以,但没有实际操作过就不发言了,仅以Gateway为主。这里只发布gateway整合sentinel相关的内容,如果gateway不能正常运行,就先把gateway正常跑起来之后,再看这里整合sentinel。
上依赖,直接上三个,不分开整了,最终效果就是在nacos配置流控规则。
<!--sentinel限流-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!--Sentinel 整合 Gateway -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
<!-- 通过nacos持久化流控规则 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
上yml配置:
spring:
sentinel:
eager: true
transport:
dashboard: 控制台安装服务器的IP:8858
scg:
fallback:
mode: response
response-status: 666
response-body: 网速太快了
# 如果不需要流控规则持久化,下边的就不需要了
datasource:
flow-rule: #自定义,写啥都行
nacos:
server-addr: #nacos.server-addr
namespace: #nacos.namespace
username: #nacos.username
password: #nacos.password
dataId: sentinel-flow-rule #自定义,写啥都行
data-type: json
rule-type: gw_flow #这里的意思是流控规则的数据,还有其他类型,参考com.alibaba.cloud.sentinel.datasource.RuleType,选择对应的类型。
api-group:#(自定义,写啥都行)
nacos:
server-addr: nacos.server-addr
namespace: nacos.namespace
username: @nacos.username
password: nacos.password
dataId: sentinel-api-group #(自定义,写啥都行)
data-type: json
rule-type: gw_api_group #这里的意思是API分组的数据
没有具体了解过,如果控制台没有展示API分组,请求链路菜单,则在启动器添加下列代码。
添加之前的控制台展示:
public static void main(String[] args) {
// 添加此代码,在Sentinel控制台中做判断使用
System.setProperty("csp.sentinel.app.type", "1");
SpringApplication.run(GatewayApplication.class, args);
log.info(">>>>>>>>> GatewayApplication start success! >>>>>>>>>>");
}
添加之后的展示:
就是这个样子了。
正常访问的展示,这个如果没有请求就没有数据展示,没有数据的情况下可以多请求几次试试,还是没有那就不要继续了,先把这个解决掉,重复之前的操作。
控制台操作来了。
这里是做API分组的流控,也就是,指定某个具体的接口,url 的流控规则。
添加成功就有一条数据了。
流控规则的两个地方。
选择自定义的API分组,进行流控规则限制,具体参数查看官方文档。写不动了。
这样基本上就可以了,那就试试效果。
正常:
限流后:网速太快了就是在上边yml配置写的限流后的响应信息。
到这里基本上流程就通了。
然后看看naocs的持久化流控规则。
1-nacos创建一个API分组文件,名为: sentinel-api-group(yml文件中的),类型:json
[
{
"apiName": #自定义,
"predicateItems": [
{
"pattern": #具体的接口url,
"matchStrategy": 0
}
]
}
#多个逗号隔开继续往下写就好了
]
2-nacos创建一个流控规则文件,名为: sentinel-flow-rule(yml文件中的),类型:json
[
{
"resource": #这个是API分组的apiName,一定要一样,
"resourceMode": 1,
"grade": 1,
"count": 1,
"interval": 1,
"controlBehavior": 0,
"burst": 0,
"maxQueueingTimeoutMs": 500
}
#多个逗号隔开继续往下写就好了
]
还有一点就是,nacos持久化后,控制台的修改不会持久化到nacos,sentinel重启之后,还是nacos的配置,所以修改还是直接从nacos修改发布就可以了,控制台就获取到最新的了。
想想应该没啥了,至少流程跑通了,细节点慢慢研究。实在是写不动了,希望帮助有缘人。