Spring Cloud整合Sentinel
@RestController
@RequestMapping("/api/order2")
@Slf4j
public class Order2Controller {
@GetMapping
@SentinelResource(
value = "ordering2",
fallbackClass= Order2Controller.class,
fallback = "ordering_fallback")
public String ordering(Integer id) {
log.debug("进来了");
if (id == 4) {
throw new IllegalArgumentException("参数异常");
}
return "下单成功";
}
//? 什么时候触发? ordering_fallback 有什么要求吗?
public static String ordering_fallback(Integer id, Throwable ex) {
log.debug("降级");
return "降级了";
}
@PostConstruct //初始化执行 降级规则
private void initDegradeRule(){
List<DegradeRule> rules = new ArrayList<>();
DegradeRule rule = new DegradeRule("ordering2")
.setGrade(CircuitBreakerStrategy.ERROR_COUNT.getType())
// Max allowed response time 错误数量
.setCount(2)
// Retry timeout (in second) 熔断10s
.setTimeWindow(20)
.setMinRequestAmount(10) //最小请求数
.setStatIntervalMs(10*1000);//10s 统计时长,统计的窗口(单位为 ms)
rules.add(rule);
DegradeRuleManager.loadRules(rules);
}
}