使用spring-cloud-zuul-ratelimit限流

pring 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增加依赖:

<dependency> <groupId>com.marcosbarbero.cloud</groupId> <artifactId>spring-cloud-zuul-ratelimit</artifactId> <version></version> </dependency>

配置示例:

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

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

Policy属性:

测试

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

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

zuul: ratelimit: key-prefix: ZUUL-LIMIT enabled: true repository: REDIS behind-proxy: true add-response-headers: false default-policy-list: #optional - will apply unless specific policy exists - limit: 200 #optional - request number limit per refresh interval window refresh-interval: 60 #default value (in seconds) type: #optional # - user - origin ## - url ## - httpmethod

policy-list: myServiceId: #特定的路由 limit: 10 refresh-interval: 60 type: - url=/api/common/user/hadAccount - origin limit: 10 refresh-interval: 60 type: - url=/api/common/user/registry/weChatDirectRegistryLogin - origin limit: 2 refresh-interval: 1 type: - url=/api/customer/queryQuotaStatus - origin limit: 10 refresh-interval: 60 type: - url=/api/common/customer/setGeographic - origin

3. 在jmerter中并发请求20个以上配置路径的API调用,只有部分10个成功:

经验分享 程序员 微信小程序 职场和发展