基于注解的Sentinel限流熔断

依赖

xml 复制代码
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-annotation-aspectj</artifactId>
    <version>1.8.8</version>
    <exclusions>
        <exclusion>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>1.8.8</version>
</dependency>

配置

全局配置

java 复制代码
@Configuration
public class SentinelAspectConfiguration {
    @Bean
    public SentinelResourceAspect sentinelResourceAspect() {
        return new SentinelResourceAspect();
    }
}

注入限流熔断规则

java 复制代码
@Component
public class SentinelConfig {

    /* 只需要在nacos中配置flowRule,也可以根据nacos配置动态刷新配置,看情况 */
    @PostConstruct
    public void initFlowRules() {
        List<FlowRule> flowRules = new ArrayList<>();

        FlowRule rule = new FlowRule();
        rule.setResource(SentinelResourceConstant.TEST_API); // 资源名要与 @SentinelResource 的 value 一致
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        rule.setCount(1); // QPS 限流阈值

        FlowRule rul2 = new FlowRule();
        rul2.setResource(SentinelResourceConstant.HELLO_API); // 资源名要与 @SentinelResource 的 value 一致
        rul2.setGrade(RuleConstant.FLOW_GRADE_QPS);
        rul2.setCount(2); // QPS 限流阈值

        flowRules.add(rule);
        flowRules.add(rul2);
        FlowRuleManager.loadRules(flowRules);
    }
}

服务

java 复制代码
@Service
@Slf4j
public class TestService {

    @Resource
    private HelloClient helloClient;

    @SentinelResource(value = SentinelResourceConstant.TEST_API, blockHandler = "blockHandler", blockHandlerClass = ExceptionUtil.class)
    public String chain(String pa) {
        return pa + "OKK";
    }

    @SentinelResource(value = SentinelResourceConstant.HELLO_API, blockHandler = "blockHandlerForHello", blockHandlerClass = ExceptionUtil.class)
    public String hello() {
        return helloClient.hello();
    }
}

异常

java 复制代码
@Slf4j
public class ExceptionUtil {

    public static String blockHandler(String pa, BlockException ex) {
        log.error("限流:{}", String.valueOf(ex));
        return "限流";
    }

    public static String blockHandlerForHello(BlockException ex) {
        log.error("限流:{}", String.valueOf(ex));
        return "限流";
    }
}

注意事项

  • SentinelResource注解中的value必须和SentinelConfig 中rule的resource保持完全一致
  • FlowRule的具体限流指标有多种,可以参考官方文档选择
相关推荐
@HNUSTer3 天前
基于 GEE 平台用 Sentinel-1 SAR 数据实现山区潜在滑坡检测
云计算·sentinel·数据集·遥感大数据·gee·云平台·sar
还是鼠鼠5 天前
《黑马商城》微服务保护-详细介绍【简单易懂注释版】
java·spring boot·spring·spring cloud·sentinel·maven
月夕·花晨8 天前
Gateway-过滤器
java·分布式·spring·spring cloud·微服务·gateway·sentinel
非凡ghost10 天前
Hard Disk Sentinel(固态硬盘监控) 多语便携版
windows·sentinel·软件需求
柳贯一(逆流河版)13 天前
Sentinel 深度解析:限流与熔断降级的微服务稳定性保障实践
微服务·架构·sentinel
耳东哇13 天前
sentinel docker gateway k8s 集群 主从
docker·gateway·sentinel
遥感之家14 天前
AWS下载sentinel-2原始影像
云计算·sentinel·aws
月夕·花晨14 天前
Gateway-断言
java·开发语言·分布式·spring cloud·微服务·nacos·sentinel
齐 飞16 天前
Spring Cloud Alibaba快速入门-Sentinel熔断规则
spring boot·spring cloud·sentinel
齐 飞17 天前
Spring Cloud Alibaba快速入门-Sentinel流量控制(FlowRule)
spring cloud·微服务·sentinel