spring boot版本:2.1.10.RELEASE

1、项目搭建

所需依赖及项目的搭建请参考上一篇博客 微服务中网关的作用及搭建

2、添加限流相关依赖
<!--Zuul限流的相关依赖-->
<dependency>
    <groupId>com.marcosbarbero.cloud</groupId>
    <artifactId>spring-cloud-zuul-ratelimit</artifactId>
    <version>1.3.4.RELEASE</version>
</dependency>
4、针对某个服务限流

application.properties 中添加如下配置:

# 针对某个服务进行限流
zuul.routes.book-product.path=/book-product/**
zuul.routes.book-product.serviceId=ebook-product-core

#开启限流
zuul.ratelimit.enabled=true
#60s内请求超过3次,服务端就抛出异常,60s后可以恢复正常请求
zuul.ratelimit.policies.book-product.limit=3
zuul.ratelimit.policies.book-product.refresh-interval=60
#针对某个IP进行限流,不影响其他IP
zuul.ratelimit.policies.book-product.type=origin
5、全局限流
#全局配置限流
zuul.ratelimit.enabled=true
zuul.ratelimit.default-policy.limit=3
zuul.ratelimit.default-policy.refresh-interval=60
zuul.ratelimit.default-policy.type=origin
6、配置详解
zuul.ratelimit.enabled:

是否开启限流,默认值false。


zuul.ratelimit.repository:

限流的存储方式。支持4种存储方式:

  • IN_MEMORY:使用ConcurrentHashMap作为数据存储(在内存中),作为默认值。
  • REDIS:使用 Redis 作为数据存储。
  • CONSUL:使用 Consul 作为数据存储。
  • JPA:使用 数据库 作为数据存储。

zuul.ratelimit.policies.ServiceId.refresh-interval:

刷新时间窗口的时间,单位秒,默认值 60秒。


zuul.ratelimit.policies.ServiceId.limit:

每个刷新时间窗口对应的请求数量限制


zuul.ratelimit.policies.ServiceId.quota:

单位时间内允许访问的总时间(统计每次请求的时间综合)。例如:

refresh-interval=60;limit=10;quota=30;,即60秒内允许10个访问,并且要求总请求时间小于30秒。


zuul.ratelimit.policies.ServiceId.type:

限流的类型。支持三种类型的限流:

  • ORIGIN:对访问IP进行限流(例如:某个IP每分钟只允许请求多少次)。
  • URL:对请求的URL进行限流(例如:某个URL每分钟只允许调用多少次)。
  • USER:对某些特定用户或者用户组进行限流(例如:非VIP用户限制每分钟只允许调用100次某个API等)。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐