服务降级(Sentinel)

服务降级

采用 @SentinelResource 注解方式实现, 必要的依赖必须引入 以及 切面Bean

接口代码

java 复制代码
    @RequestMapping("/degrade")
    @SentinelResource(value = DEGRADE_RESOURCE_NAME, blockHandler = "blockHandlerForDegrade",
            entryType = EntryType.IN)
    public User degrade(String id) {
        // 异常
        throw new RuntimeException("异常");
    }

降级处理

注意: 方法的访问权限、参数格式 和 流控的一致

java 复制代码
    public User blockHandlerForDegrade(String id, BlockException be) {
        logger.info("++++++++服务降级");
        return new User(id, "服务降级了!!!");
    }

降级规则

java 复制代码
    @PostConstruct
    private static void initDegradeRules() { // 通常设置在服务调用端
        List<DegradeRule> degradeRuleList = new ArrayList<>();

        DegradeRule degradeRule = new DegradeRule();
        // 设置资源名称
        degradeRule.setResource(DEGRADE_RESOURCE_NAME);
        // 设置规则策略 -> 异常数
        degradeRule.setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT);
        // 触发熔断异常数量
        degradeRule.setCount(2);
        // 熔断时长 单位:秒
        // 一旦触发熔断,再次请求对应的接口会调用降级处理方法
        // 熔断时长过后--半开状态: 恢复接口请求调用, 如果一次请求就异常, 再次熔断, 不会根据设置来计算是否熔断
        degradeRule.setTimeWindow(10);
        // 触发熔断最小请求数
        degradeRule.setMinRequestAmount(2);
        // 统计时长 单位:毫秒  默认:1000ms
        degradeRule.setStatIntervalMs(60 * 1000 );

        // 一分钟内: 执行下了两次  出现了两次异常  就会触发熔断

        degradeRuleList.add(degradeRule);

        DegradeRuleManager.loadRules(degradeRuleList);
    }

效果

  • 连续三次异常后服务被降级
  • 再进行访问还是异常,再次访问直接降级
相关推荐
周GZ3 分钟前
简单讲解线程池的4种拒绝策略
java
白远山17 分钟前
24小时自助健身房系统开发实战:从需求分析到完整指南
java·开发语言·数据库·数据挖掘·需求分析
暮雨哀尘19 分钟前
JAVA基础练习(四):SpringBoot 实现简易登录功能
java·spring boot·eclipse·maven
光依旧1 小时前
MCP实战手记系列(二):跑通第一个 MCP Server(文末附github源码链接)
java·spring ai·mcp·ai 开发·源码实战
jonyleek1 小时前
企业文档私有化实践:基于JVS数字底座的可控协同架构设计与落地要点
elasticsearch·私有化部署·springcloud·微服务架构·信创适配·jvs·企业文档
白远山2 小时前
上海24小时自助健身房系统软件开发实战指南:从需求到部署
java·架构·uni-app·需求分析
MayBaymax2 小时前
Spring AI Alibaba Graph 快速上手:黑板、节点、边
java·spring·ai·ai编程
斑鸠喳喳2 小时前
可重入锁 ReentrantLock
java·源码
IT枫斗者枫哥2 小时前
Spring AI 聊天记忆落库:重启后,怎样接上上一轮对话
java