Sentinel(二)网关流控配置
Sentinel(二)网关流控
官网介绍:https://github.com/alibaba/Sentinel/wiki/网关限流
1 引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
sentinel-gateway的版本需要对应alibaba-spring-cloud的版本
结果是怎么弄sentinel的控制台也不显示网关,我是真烦阿里的产品。。文档做得一言难尽
先记录一下,以后用到再搞吧
2 网关流控规则
- 设置route_id后即可针对某个路由进行流控
- 在针对请求属性的设置中,可以选择
具体参数
和匹配模式
来匹配请求的属性 QPS
和阈值
进行流控,流控效果有快速失败
和匀速排队
![image-20230809101547721](https://hikaru0530.oss-cn-hangzhou.aliyuncs.com/PicGo/image-20230809101547721.png)
新增自定义API分组
- 可以将多个自定义API进行分组,在进行流控的时候可以针对一组的API进行流控
- 每个API的匹配模式可以分为:
- 精确
- 前缀
- 正则
-
3 网关层自定义返回
方式一:配置返回格式和返回的状态码:
spring.cloud.sentinel.scg.fallback.content-type=application/json
spring.cloud.sentinel.scg.fallback.response-status=400
方式二:自定义返回
@Configuration
public class SentinelGatewayConfig {
public SentinelGatewayConfig() {
GatewayCallbackManager.setBlockHandler(new BlockRequestHandler() {
@Override
public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
R error = R.error(BizCodeEnum.TOO_MANY_REQUESTS);
String s = JSON.toJSONString(error);
return ServerResponse.ok().body(Mono.just(s), String.class);
}
});
}
}