十四.SpringCloudAlibaba极简入门-Sentinel对Gateway网关进行限流

傷城~ 2022-12-21 03:13 219阅读 0赞

前言

服务网关在微服务架构中充当了请求访问入口的角色,是非常重要的一个部分,在高并发的系统中我们通常会在网关层通过流控降级等手段把多余的请求拒绝在外来防止微服务被高并发请求打垮,在之前我们有讨论过《服务网关Spring Cloud Gateway》和 《Sentinel流控》,一个是服务网关,一个是流控降级,本篇文章要讨论的是如何使用Sentinel对Gateway进行流控


Gateway整合Sentinel

alibaba专门为gateway提供了一个适配包“spring-cloud-alibaba-sentinel-gateway”,我们导入它就可以完成对网关的流控工作

1.导入依赖

  1. <!--整合gateway的依赖 -->
  2. <dependency>
  3. <groupId>com.alibaba.cloud </groupId>
  4. <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
  5. <version>2.1.0.RELEASE</version>
  6. </dependency>
  7. <!--sentinel基础依赖-->
  8. <dependency>
  9. <groupId>com.alibaba.cloud</groupId>
  10. <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  11. </dependency>

2.Sentinel地址配置

  1. server:
  2. port: 10100
  3. spring:
  4. application:
  5. name: gateway-service
  6. cloud:
  7. sentinel:
  8. transport:
  9. dashboard: 127.0.0.1:1111

3.配置流控规则

当通过网关发起访问时,Sentinel的控制台就可以看网关服务,我们可以对请求的资源设定流控规则
在这里插入图片描述
然后频繁访问被限流的资源,限流效果如下:
在这里插入图片描述

4.定义限流结果

当请求被限流了,会抛出FlowException异常,这样的异常信息对用户不友好,我们需要制定限流响应结果,在Gateway中Sentinel提供了GatewayCallbackManager管理器来设置限流结果处理,如下:

  1. @Configuration
  2. public class SentinelConfig {
  3. public SentinelConfig(){
  4. GatewayCallbackManager.setBlockHandler(new BlockRequestHandler() {
  5. @Override
  6. public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {
  7. return ServerResponse.ok().body(Mono.just("限流啦,请求太频繁"),String.class);
  8. }
  9. });
  10. }
  11. }

再次频繁访问资源,测试限流效果如下:
在这里插入图片描述

到这里文章结束

发表评论

表情:
评论列表 (有 0 条评论,219人围观)

还没有评论,来说两句吧...

相关阅读