接口测试类
@Api(tags = "sentinel适配器测试控制器") @RestController @RequestMapping(value = "/sentinel/adapter") public class SentinelAdapterTestController extends BaseController {
@ApiOperation(value = "降级测试-平均响应时间", httpMethod = "GET")
@RequestMapping(value = "degrade", method = RequestMethod.GET)
public Result degrade() {
List<DegradeRule> rules = DegradeRuleManager.getRules();
System.out.println("rules:" + rules);
try {
TimeUnit.MILLISECONDS.sleep(600);
} catch (InterruptedException e) {
e.printStackTrace();
}
return succeed();
}
@ApiOperation(value = "降级测试-异常比例", httpMethod = "GET")
@RequestMapping(value = "exceptionRatioDegrade", method = RequestMethod.GET)
public Result exceptionRatioDegrade() {
List<DegradeRule> rules = DegradeRuleManager.getRules();
System.out.println("rules:" + rules);
int a = 1 / 0;
return succeed();
}
@ApiOperation(value = "降级测试-异常数", httpMethod = "GET")
@RequestMapping(value = "exceptionCountDegrade", method = RequestMethod.GET)
public Result exceptionCountDegrade() {
List<DegradeRule> rules = DegradeRuleManager.getRules();
System.out.println("rules:" + rules);
int a = 1 / 0;
return succeed();
}
}
设置的降级规则
问题描述: 设置的异常比例和异常数规则均不生效,一直请求都可以进入方法
原提问者GitHub用户ftpxzxh
经过测试,发现是自己项目中有全局异常拦截,导致无法进入到Sentinel的自动异常统计代码,可以在全局异常的处理逻辑方法的最前面调用一下以下代码即可解决该问题
private void recordExceptionToSentinel(Throwable e) throws Throwable { if (e instanceof BlockException) { throw e; }else if(e instanceof IOException){ Tracer.trace(e); }else if(e instanceof ServletException){ Tracer.trace(e); }else if(e instanceof RuntimeException){ Tracer.trace(e); } }
原回答者GitHub用户ftpxzxh
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。