zuul如何实现流量控制

zuul如何实现流量控制

由链锁定的文件夹

简述

Spring Cloud Zuul RateLimit项目Github地址:

https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit

该包实现了在Zuul对每个服务进行限流。提供的几种限流方式:

1. 认证用户(Authenticated User)

使用已认证的用户名(username)或'anonymous'

2. 原始请求(Request Origin)

使用用户的原始请求

3. URL

使用上游请求的地址

4. 针对每个服务的全局配置

该方式不会验证Request Origin,Authenticated User或URL

使用该方式只需不设置‘type’参数即可

使用方式

pom.xml增加依赖:

com.marcosbarbero.cloud

spring-cloud-zuul-ratelimit

1.3.2.RELEASE

配置示例:

zuul:

ratelimit:

key-prefix: your-prefix #对应用来标识请求的key的前缀

enabled: true

repository: REDIS #对应存储类型(用来存储统计信息)

behind-proxy: true #代理之后

default-policy: #可选 - 针对所有的路由配置的策略,除非特别配置了policies

limit: 10 #可选 - 每个刷新时间窗口对应的请求数量限制

quota: 1000 #可选- 每个刷新时间窗口对应的请求时间限制(秒)

refresh-interval: 60 # 刷新时间窗口的时间,默认值 (秒)

type: #可选 限流方式

- user

- origin

- url

policies:

myServiceId: #特定的路由

limit: 10 #可选- 每个刷新时间窗口对应的请求数量限制

quota: 1000 #可选- 每个刷新时间窗口对应的请求时间限制(秒)

refresh-interval: 60 # 刷新时间窗口的时间,默认值 (秒)

type: #可选 限流方式

- user

- origin

- url

通用应用程序配置

配置命名空间:zuul.ratelimit


zuul如何实现流量控制


说明:使用不同的repository,需要在pom中加入相关的依赖包。

Policy属性:


zuul如何实现流量控制


测试

1. 启动一个Zuul服务和一个API服务,配置正常的路由规则。访问API:


zuul如何实现流量控制


2. 按照上面的使用方式,重新启动配置有RateLimit的Zuul。相关配置:


zuul如何实现流量控制


3. 在postman中集中运行12次相同的API调用,结果中有两次调用返回429:


zuul如何实现流量控制


4. 查看对应的Response Headers和Body的信息:


zuul如何实现流量控制


自定义Key策略

如果希望自己控制key的策略,可以通过自定义RateLimitKeyGenerator的实现来增加自己的策略逻辑。

实例:

根据请求上的参数来对请求进行限流。比如有一个请求是http://localhost:8765/api-a//hello2?name=kevin,对相同的name值进行限流。我们设置了1分钟内,限流10次,那么如果1分钟内,name是kevin的请求超过10次,就会发生限流。

RateLimitKeyGenerator的实现:


zuul如何实现流量控制


测试


zuul如何实现流量控制


同时发送13个请求,其中name=kevin的有11次,name=marry的有2次,测试结果如下:


zuul如何实现流量控制



分享到:


相關文章: