高并发解决方案限流技术—–使用RateLimiter实现令牌桶限流

释放双眼,带上耳机,听听看~!

1,RateLimiter是guava提供的基于令牌桶算法的实现类,可以非常简单的完成限流特技,并且根据系统的实际情况来调整生成token的速率。
通常可应用于抢购限流防止冲垮系统;限制某接口、服务单位时间内的访问量,譬如一些第三方服务会对用户访问量进行限制;限制网速,单位时间内只允许上传下载多少字节等。

guava的maven依赖


1
2
3
4
5
6
1<dependency>
2     <groupId>com.google.guava</groupId>
3     <artifactId>guava</artifactId>
4     <version>25.1-jre</version>
5 </dependency>
6

高并发解决方案限流技术-----使用RateLimiter实现令牌桶限流

2,令牌桶的原理,有一个独立线程一直以一个固定的速率往桶中存放令牌

   客户端去桶中获取令牌,获取到令牌,就可以访问,获取不到,说明请求过多,需要服务降级。

3,


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
1package com.aiyuesheng.controller;
2
3import java.util.concurrent.TimeUnit;
4
5import org.springframework.beans.factory.annotation.Autowired;
6import org.springframework.beans.factory.annotation.Value;
7import org.springframework.web.bind.annotation.RequestMapping;
8import org.springframework.web.bind.annotation.RestController;
9
10import com.aiyuesheng.hystrix.OrderHystrixCommand;
11import com.aiyuesheng.service.OrderService;
12import com.aiyuesheng.utils.LimitService;
13import com.alibaba.fastjson.JSONObject;
14import com.google.common.util.concurrent.RateLimiter;
15
16@RestController
17public class Index {// 令牌桶:1.0 表示 每秒中生成1个令牌存放在桶中
18    RateLimiter rateLimiter = RateLimiter.create(1.0);
19
20    @Autowired
21    private OrderService orderService;
22//令牌桶限流
23    @RequestMapping("/searchCustomerInfoByRateLimiter")
24    public Object searchCustomerInfoByRateLimiter() {
25        // 1.限流判断
26        // 如果在0.5秒内 没有获取不到令牌的话,则会一直等待
27        System.out.println("生成令牌等待时间:" + rateLimiter.acquire());
28        boolean acquire = rateLimiter.tryAcquire(500, TimeUnit.MILLISECONDS); // 每次发送请求,愿意等待0.5秒,如果设为1秒,每次都能查询成功,因为没秒中都会放入一个令牌到桶中
29        if (!acquire) {
30            System.out.println("稍后再试!");
31            return "稍后再试!";
32        }
33        // 2.如果没有达到限流的要求,直接调用接口查询
34        System.out.println(orderService.searchCustomerInfo());
35        return orderService.searchCustomerInfo();
36    }
37
38}
39

 

给TA打赏
共{{data.count}}人
人已打赏
安全经验

如何避免Adsense违规封号

2021-10-11 16:36:11

安全经验

安全咨询服务

2022-1-12 14:11:49

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索