2 个回答
直接在request方法上添加@sentinelResource即可,示例如下:
@GetMapping("/order/{id}")
@SentinelResource(
value = "queryOrder",
fallback = "queryOrderFallback", // 服务异常降级方法
blockHandler = "queryOrderBlockHandler" // 限流/熔断降级方法
)
public String queryOrder(@PathVariable String id) {
// 模拟调用外部服务(如库存查询)
if (id.equals("0")) throw new RuntimeException("服务异常");
return "订单详情:" + id;
}
// 服务异常降级处理
public String queryOrderFallback(String id, Throwable e) {
return "服务繁忙,请稍后再试!";
}
// 限流/熔断降级处理
public String queryOrderBlockHandler(String id, BlockException e) {
return "当前请求过多,请稍后再试!";
}
发布于:2周前 (04-16) IP属地:
代码动态配置规则,比如基于响应时间触发降级:
@Configuration
public class SentinelConfig {
@PostConstruct
public void initRules() {
DegradeRule degradeRule = new DegradeRule();
degradeRule.setResource("queryOrder");
degradeRule.setGrade(RuleConstant.DEGRADE_GRADE_RT); // 响应时间模式
degradeRule.setCount(100); // 阈值:100ms
degradeRule.setTimeWindow(10); // 熔断时间窗口:10秒
DegradeRuleManager.loadRules(Collections.singletonList(degradeRule));
}
}
发布于:2周前 (04-16) IP属地:
我来回答
您需要 登录 后回答此问题!