出现该异常的原因:
1.如果controller的方法内有参数,则在写BlockHandler的方法时需要在方法内写上一样的参数
@Resource
private PaymentService paymentService;
@GetMapping(value = "/consumer/payment/{id}")
@SentinelResource(value = "payment", blockHandler = "blockHandler_Payment")
public String payment(@PathVariable("id") Long id) {
return "访问成功,id为:" + id;
}
public String blockHandler_Payment(Long id, BlockException blockException) {
return "限制访问,id为:" + id;
}
2.如果是全局BlockHandler处理,则在处理类里的方法需要加上static关键字
public class CustomerBlockHandler {
public static String blockHandler_Payment_Global(Long id, BlockException blockException) {
return "限制访问,id为:" + id;
}
}
3.如果在@SentinelResource内属性blockHandler没有识别到匹配的方法,会将属性fallback的内容替代blockHandler内容
@Resource
private PaymentService paymentService;
@GetMapping(value = "/consumer/payment/{id}")
@SentinelResource(value = "payment", fallback = "fallback_Payment",blockHandler = "blockHandler_Payment")
public String payment(@PathVariable("id") Long id) {
return "访问成功,id为:" + id;
}
public String fallback_Payment(Long id, Throwable e) {
return "出现异常,id为:" + id + "异常为:" + e.getMessage();
}
public String blockHandler_Payment(BlockException blockException) {
return "限制访问,id为:" + id;
}