SpringCloud 微服务接口限流的两种方式

本文介绍了在SpringCloud微服务中实现接口限流的两种方法:Zuul结合RateLimiter进行限流和使用自定义过滤器限流。通过实例展示了如何配置和测试限流策略,确保系统在高并发场景下的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

我想,大家平时接触最多的app就是淘宝、京东了吧!这些大的电商网站,每天处理的访问量都是亿级的。如果,不对系统中的各个接口进行保护,当并发访问量大时,系统就会发生故障。

所以,保护好系统,就会用到缓存、降级和限流这三把利器。前面讲过了断路器Hystrix的熔断与降级;缓存可以使用内存里面的缓存队列、消息中间件、分布式缓存;限流可以使用Zuul来实现。通过限流,可以很好地控制系统的qps。

每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

服务限流

方法一:Zuul+RateLimiter

RateLimiter是Guava提供的基于令牌桶算法的实现类,可以非常简单的完成限流特技,并且根据系统的实际情况来调整生成token的速率。

至于令牌桶算法的基本流程,大家可以通过查询相关资料进行学习。给大家推荐一个讲解令牌桶算法的视频,个人觉得易于理解。https://www.bilibili.com/video/av26168532/ ,接下来,就用代码的方式来实现Zuul的限流。

要用RateLimiter,需要导入相应的约束,所以,就对上篇博文中的网关服务(api-gateway)进行改造,pom中增加约束。

<dependency>
    <groupId>com.marcosbarbero.cloud</groupId>
    <artifactId>spring-cloud-zuul-ratelimit</artifactId>
    <version>2.1.0.RELEASE</version>
</dependency>
<!--redis-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

注意,这里需要用到Redis,所以也需要把Redis的约束导入。然后在yml中添加相应的配置。

  ratelimit:
    enabled: true
    default-policy:
      limit: 10
      quota: 4
      refresh-interval: 5
      type: #可选 限流方式
        - url
  • ratelimit.enabled=true表示开启限流策略。

  • ratelimit.default-policy.limit=10 表示请求控制在10次以内。

  • ratelimit.default-policy.quota=4 请求时间不得超过4秒。

  • ratelimit.default-policy.refresh-interval=5 刷新间隔是5秒。

综上所述:所有服务在5秒内只能有10次请求,并且请求的时间总和不得超过4秒。

配置完成,接下来,启动服务,进行测试。

可以看到,在启动网关服务的时候,出现了异常。上面指出zuul.ratelimit.repository

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值