1. sentinel简介

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

2.包引入和配置

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

maven包的引入

1
2
3
4
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

application.yml加一个qps限制

1
2
qps:
  limit:2

  

3.接口限流代码

1.接口代码

1
2
3
4
5
6
7
8
@RestController
public class MyController {
    @RequestMapping("/hello")
    @SentinelResource(value = SentinelRuleConfig.QPS_LIMIT)
    public String hello(){
        return "hello";
    }
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@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来定义处理类,我采用的是全局异常处理统一返回固定信息

1
2
3
4
5
6
7
8
9
10
11
@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源码链接

 

  

posted @ 2021-12-05 19:45 森林木马 阅读(1980) 评论(0) 推荐(0) 编辑
摘要: 1.工具简介 CurrentLimiting:基于令牌桶算法和漏桶算法实现的纳秒级分布式无锁限流插件,完美嵌入SpringBoot、SpringCloud应用,支持接口限流、方法限流、系统限流、IP限流、用户限流等规则,支持设置系统启动保护时间(保护时间内不允许访问),提供快速失败与CAS阻塞两种限 阅读全文
posted @ 2021-12-05 19:15 森林木马 阅读(1517) 评论(0) 推荐(0) 编辑
摘要: 一、Spring cloud stream概述 Spring Cloud Stream是构建消息驱动的微服务应用程序框架。提供统一的接收发送管道以连接到消息代理。通过@EnableBinding注解开启SpringCloudStream的支持。通过@StreamListener注解,使其接收流处理的 阅读全文
posted @ 2021-10-25 21:19 森林木马 阅读(3864) 评论(0) 推荐(0) 编辑
摘要: 使用idea2020.2.2新版本发现新建的springboot项目起不来,报错信息如下: java: 程序包org.springframework.boot不存在java: 程序包org.springframework.boot.autoconfigure不存在java: 找不到符号 需设置Mav 阅读全文
posted @ 2021-08-28 23:57 森林木马 阅读(680) 评论(0) 推荐(0) 编辑
摘要: 之前的开发过程中遇到过各种各样的接口对接,有WebService也有Restful的接口,通讯方式也是多种多样。 对于模拟HTTP请求,一直是使用HttpClient的。这里顺便普及一下Http请求的几个方法: (1)GET:通过请求URI得到资源 (2)POST:用于添加新的内容 (3)PUT:用 阅读全文
posted @ 2021-07-29 19:10 森林木马 阅读(3734) 评论(0) 推荐(0) 编辑
摘要: 色 彩 RGB 值 对 照 表 color red green blue Hexadecimal triplet example Aliceblue 240 248 255 f0f8ff Antiquewhite 250 235 215 faebd7 Aqua 0 255 255 00ffff Aq 阅读全文
posted @ 2021-05-20 10:16 森林木马 阅读(3586) 评论(0) 推荐(0) 编辑
摘要: 应用情景 当前很多公司都选择git作为代码版本控制工具,然后自己公司搭建私有的gitlab来管理代码,我们在clone代码的时候可以选择https协议,当然我们亦可以选择ssh协议来拉取代码。但是网上很少找到如何用git客户端生成ssh key,然后配置在gitlab,那么本文,我们就来聊一聊如何本 阅读全文
posted @ 2021-04-22 20:35 森林木马 阅读(2655) 评论(0) 推荐(0) 编辑
摘要: Springboot项目Java轻松实现Excel导出 一、需求背景 要求Java后端实现一个Excel导出功能。 二、工程包引入 implementation group: 'org.apache.poi', name: 'poi', version: '4.0.1' implementation 阅读全文
posted @ 2021-03-29 11:03 森林木马 阅读(854) 评论(0) 推荐(0) 编辑
摘要: mybatis-plus报错解决Invalid bound statement (not found)错误 异常信息 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): XXMapper.f 阅读全文
posted @ 2021-03-23 18:04 森林木马 阅读(5393) 评论(0) 推荐(0) 编辑
摘要: 一、问题背景 使用@Scheduled创建两个定时任务,其中一个1s执行。另一个1min执行。按分钟执行的出现了bug,我设定的规则如下: @Async @Scheduled(cron = "0 0/1 * * * ?") public void workOfMin() { logger.info( 阅读全文
posted @ 2021-01-19 19:30 森林木马 阅读(4340) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示