先说结论:
1.保证SentinelResource注解中资源名要与@GetMapper名称不一致
2.限流方法中如果有Id等参数,在兜底方法中也要有(如本篇)
3.兜底方法的返回值与限流方法返回值必须保证一致
4.兜底方法的异常类型参数必须是BlockException
我的配置如下,在Controller中
兜底方法
结果控制台打印报错
浏览器访问报错
出现问题的原因是在兜底方法中没配置参数,在资源方法中有orderId参数,而在兜底方法中没有
正确方式
/**blockHandler 函数会在原方法被限流/降级/系统保护的时候调用*****/
public static Order failBlockHandler(Long orderId,BlockException be) {
Order order = new Order();
order.setName("您访问的太频繁了,请稍后再试!");
return order;
}