• Springboot限流工具之sentinel单机限流场景无控制台


    1. sentinel简介

    随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

    2.包引入和配置

    本次方案是不引入控制台的限流应用

    maven包的引入

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    </dependency>

    application.yml加一个qps限制

    qps:
      limit:2
    

      

    3.接口限流代码

    1.接口代码

    @RestController
    public class MyController {
        @RequestMapping("/hello")
        @SentinelResource(value = SentinelRuleConfig.QPS_LIMIT)
        public String hello(){
            return "hello";
        }
    }

    2.单机全局限流配置类SentinelRuleConfig.class

    @Component
    public class SentinelRuleConfig implements InitializingBean {
    
        @Value("${qps.limit}")
        private Integer limit;
    
        public final static String QPS_LIMIT = "concurrent_qps_limit";
    
        @Override
        public void afterPropertiesSet() {
            initFlowQpsRule(QPS_LIMIT);
        }
    
        private void initFlowQpsRule(String resource) {
            List<FlowRule> rules = new ArrayList<>();
            FlowRule rule1 = new FlowRule();
            rule1.setResource(resource);
            rule1.setCount(limit);
            rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);
            rules.add(rule1);
            FlowRuleManager.loadRules(rules);
        }
    }
    

    3.拒绝策略

    支持自定义异常处理通过blockHandler来定义处理类,我采用的是全局异常处理统一返回固定信息

    @RestControllerAdvice
    public class GlobalExceptionHandler{
    
        /**
         * 限流异常
         */
        @ExceptionHandler(FlowException.class)
        public Result flowExceptionHandler(FlowException ex) {
            return Result.failed(ex.msg);
        }
    }

    4.接口限流测试

    已经用jemter或者postman等工具手动测试,发现每秒接口并发超过2的时候会返回我们定义的提示信息。

    5. 总结

    本文介绍的是sentinel的单机使用场景,不支持集群,不需要引入控制台。目前demo中介绍了一种qps限制策略。可以有其它多种策略可用,根据业务需要自行选定。

    sentinel源码链接

      

    作者:森林木马

    -------------------------------------------

    特此声明:所有评论和私信都会在第一时间回复。也欢迎朋友们指正错误,共同进步!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    个性签名:好记性不如勤随笔,好随笔还请多关注!

  • 相关阅读:
    React教程(一) React介绍与搭建
    微信公众号订阅号以及服务号通过网页授权获取用户openid方法
    AES,DES加密JS源文件及其使用方法
    R 分类进行数值处理
    C++ const 关键字总结
    软工lintcode作业
    [恶意软件分析]DroidBox的环境搭建与使用
    Android第三次作业
    Android第二次作业
    android 第一次作业
  • 原文地址:https://www.cnblogs.com/owenma/p/15646850.html
Copyright © 2020-2023  润新知