SpringCloud(41)——Sentinel自定义回滚方法配置

我们都知道Sentinel默认的回滚提示是Blocked by Sentinel
而且我也给大家演示了如何写自定义的回滚方法。

image.png

但是这样写还有一些问题:
①依照现有条件,我们自定义的处理方法又和业务代码耦合在一起,不直观。
②每个业务方法都要有一个自定义的回滚方法,很容易使代码膨胀加剧。
③没有体现全局的统一处理方法

针对这几个问题,Sentinel也是有解决方案的

1.新建统一的BlockHandler处理类
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 是我自己写的自定义的统一返回对象,这个handler里面有两个方法,分别打印的---1和---2。

2.新建一个测试的controller方法
    @GetMapping("/rateLimit/customerBlockHandler")
    @SentinelResource(value = "customerBlockHandler",
            blockHandlerClass = CustomerBlockHandler.class,
            blockHandler = "handlerException2")
    public CommonResult customerBlockHandler()
    {
        return new CommonResult(200,"按客戶自定义",new Payment(2020L,"serial003"));
    }

SentinelResource属性说明:
value是资源名,可以通过sentinel控制台直接配置资源名来进行限流
blockHandlerClass是配置我们的全局统一回滚方法的处理类。
blockHandler配置的是具体的方法。

image.png
3.在sentinel控制台新增一个流控规则
image.png

可以看到我们配置是@SentinelResource里面的资源名,而不是GetMapping。

4.测试

正常发送一下是没有问题的

image.png

接下来观察流控的效果

image.png

可以看到返回的是统一回滚方法里面的第二个方法,说明我们的配置是生效的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容