流控组件Sentinel核心注解@SentinelResource中的参数fallback和blockHandler的使用方式

该博客介绍了Sentinel在Java程序中的使用,包括当程序运行错误时的fallback处理方法`handlerFallback`和资源违反限流规则时的blockHandler处理方法`blockHandler`。在同时发生错误和限流时,Sentinel会优先执行blockHandler。配置了Sentinel后,持续刷新导致限流,会执行`blockHandler`返回熔断降级信息。
摘要由CSDN通过智能技术生成

fallback顾名思义当Java程序运行发生错误时,由该参数定义的方法进行处理

    @GetMapping(value = "/consumer/{id}")
    @SentinelResource(value = "consumer", fallback = "handlerFallback")
    public ResponseEntity<String> consumerData(@PathVariable("id")Integer id) {
        ResponseEntity<String> entity = remoteService.getData(id);
        if (id <= 0) {
            throw new IllegalArgumentException("非法参数异常!");
        } else if (entity.getData() == null) {
            throw new NullPointerException("无响应数据,空指针异常!");
        }
        return entity;
    }

    public ResponseEntity<String> handlerFallback(Integer id, Throwable e) {
        return new ResponseEntity<>(443, "程序处理异常,开始执行fallback数据-->" +e.getMessage());
    }
  

在这里插入图片描述

blockHandler这个也很好明白,也就是当API违背控制台设置的阈值时,执行该参数定义的方法进行处理;说白了就是限流之后的处理

@GetMapping(value = "/consumer/{id}")
    @SentinelResource(value = "consumer",blockHandler = "blockHandler")
    public ResponseEntity<String> consumerData(@PathVariable("id")Integer id) {
        ResponseEntity<String> entity = remoteService.getData(id);
        if (id <= 0) {
            throw new IllegalArgumentException("非法参数异常!");
        } else if (entity.getData() == null) {
            throw new NullPointerException("无响应数据,空指针异常!");
        }
        return entity;
    }

    public ResponseEntity<String> blockHandler(BlockException blockException) {
        return new ResponseEntity<>(444, "QPS过高,服务开始熔断降级--->"+blockException.getMessage());
    }

在这里插入图片描述

那么问题来了,如果同时发生Java运行错误和限流,那么会走哪个默认的方法呢?

 @GetMapping(value = "/consumer/{id}")
    @SentinelResource(value = "consumer", fallback = "handlerFallback", blockHandler = "blockHandler")
    public ResponseEntity<String> consumerData(@PathVariable("id")Integer id) {
        ResponseEntity<String> entity = remoteService.getData(id);
        if (id <= 0) {
            throw new IllegalArgumentException("非法参数异常!");
        } else if (entity.getData() == null) {
            throw new NullPointerException("无响应数据,空指针异常!");
        }
        return entity;
    }

    public ResponseEntity<String> handlerFallback(Integer id, Throwable e) {
        return new ResponseEntity<>(443, "程序处理异常,开始执行fallback数据-->" +e.getMessage());
    }
    public ResponseEntity<String> blockHandler(Integer id, BlockException blockException) {
        return new ResponseEntity<>(444, "QPS过高,服务开始熔断降级--->"+blockException.getMessage());
    }

设置限流规则
在这里插入图片描述

当我持续刷新,它走的是blockHandler路线

在这里插入图片描述
记得在配置文件加入以下

feign:
  sentinel:
    enabled: true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thecoastlines

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值