微服务Zuul实现限流保护
spring boot版本:2.1.10.RELEASE1、项目搭建所需依赖及项目的搭建请参考上一篇博客 微服务中网关的作用及搭建2、添加限流相关依赖<!--Zuul限流的相关依赖--><dependency><groupId>com.marcosbarbero.cloud</groupId><artifactId...
·
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等)。
更多推荐
已为社区贡献6条内容
所有评论(0)