场景
SpringCloudAlibaba集成Sentinel之热点参数限流的使用:
SpringCloudAlibaba集成Sentinel之热点参数限流的使用_霸道流氓气质的博客-CSDN博客
在上面进行限流之后回调方法的设置时是通过如下方式
@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey",blockHandler = "deal_testHotKey")
public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
@RequestParam(value = "p2",required = false) String p2)
{
return "------testHotKey";
}
public String deal_testHotKey (String p1, String p2, BlockException exception)
{
return "------deal_testHotKey,o(╥﹏╥)o"; //sentinel系统默认的提示:Blocked by Sentinel (flow limiting)
}
如果要限制的接口较多总不能每一个接口都要写一个限流的处理回调方法吧,有没有可以全局
设置通用的回调处理方法。实现业务和配置的低耦合。
注:
博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
1、在下面的基础上实现与Sentinel的集成。
SpringCloudAlibaba中使用Sentinel实现流量控制以及流控规则详解:
SpringCloudAlibaba中使用Sentinel实现流量控制以及流控规则详解_霸道流氓气质的博客-CSDN博客
2、新建一个handler类用来处理限流的回调
package com.badao.springcloudalibabademo.myhandler;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.badao.springclouddemo.entities.CommonResult;
public class CustomerBlockHandler
{
public static CommonResult handlerException(BlockException exception)
{
return new CommonResult(4444,"按客戶自定义,global handlerException----1");
}
public static CommonResult handlerException2(BlockException exception)
{
return new CommonResult(4444,"按客戶自定义,global handlerException----2");
}
}
注意这里的CommonResult是自定义的返回结果的封装类
package com.badao.springclouddemo.entities;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult<T>
{
private Integer code;
private String message;
private T data;
public CommonResult(Integer code, String message)
{
this(code,message,null);
}
}
然后这个handler其方法必须是static,然后这里声明了两个方法,可以在下面设置限流回调时指定使用哪个方法进行处理。
2、然后在需要进行限流兜底处理的接口上添加注解
@SentinelResource(value = "customerBlockHandler",
blockHandlerClass = CustomerBlockHandler.class,
blockHandler = "handlerException2")
并指明是哪个类的哪个方法来处理。
完整接口
package com.badao.springcloudalibabademo.controller;
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.badao.springcloudalibabademo.myhandler.CustomerBlockHandler;
import com.badao.springclouddemo.entities.CommonResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RateLimitController
{
@GetMapping("/rateLimit/customerBlockHandler")
@SentinelResource(value = "customerBlockHandler",
blockHandlerClass = CustomerBlockHandler.class,
blockHandler = "handlerException2")
public CommonResult customerBlockHandler()
{
return new CommonResult(200,"按客戶自定义");
}
}
3、效果演示
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135931.html