上次介绍了使用Zuul通过一个过滤器实现权限校验的功能。在互联网应用高并发的情况下,由于请求数量过多可能导致服务器无法承载而出现故障。这种情况就需要对请求数量进行限制,让系统在有限的请求数下正常运行。本篇将介绍如何通过Zuul-ratelimit对用户请求进行限流。
本篇不再赘述zuul API Gateway的配置和启动了,只把为实现限流功能需要添加的配置进行介绍。感兴趣的朋友可以到专栏中查看API网关的详细配置。
1、 添加spring-cloud-zuul-ratelimit依赖。
2、 全局限流配置
zuul.ratelimit.enabled=true:限流开关,true打开限流。
zuul.ratelimit.default-policy.limit=5:全局限流策略,在一个单位时间窗口内的请求次数5次。
zuul.ratelimit.default-policy.quota=5:可选,在一个单位时间窗口内的请求时间5秒。
zuul.ratelimit.default-policy.refresh-interval=10:全局限流策略,一个单位时间窗口10秒。
以上配置描述的内容简言之就是:在10秒内只允许访问5次,如果10秒内访问次数超过5,则会返回Too many requests。
3、 特定服务限流配置
zuul.ratelimit.policies.workflow.limit=2:服务限流策略,在一个单位时间窗口内请求的次数2次。
zuul.ratelimit.policies.workflow.quota=1:可选,在一个单位时间窗口内的请求时间5秒。
zuul.ratelimit.policies.workflow.refresh-interval=3:服务限流策略,一个单位时间窗口3秒。
以上配置简言之就是:在workflow这个服务的请求上,3秒内允许访问2次,如果3秒内访问次数超过2,则返回Too many requests。这个3秒内限制2次请求只限于workflow这个路由对应的服务请求,其他服务的请求限流策略还是10秒内5次的限制。这就是全局和具体服务限流策略的区别。
其中重点是“workflow”,它是前面zuul已经配置过的路由,如下图:
好了,现在来测试一下。我们访问/wf/workflow/getWorkflow这个地址,前两次返回正常的结果。第3次返回如下:
以上即为通过zuul-ratelimit实现的全局和具体服务的限流配置策略。建议收藏。