在本系列的 上一篇文章 中,我们实现了一个基于 Zuul 的 Gateway, 并通过 Gateway 访问了 todo 微服务。本文中,我们将演示在 Gateway 中实现简单的流量限制功能。
增加依赖库
在 上一篇文章 已完成的Gateway的项目中增加如下依赖库:
1 | <dependency> |
因为在 Spring Cloud 提供的集成 Netflix Zuul 并没有提供通过简单配置的方式来完成限流功能,所以我们这里使用一个第三方库: spring-cloud-zuul-ratelimit 官网, 该库实现了多种方式的限流。
修改配置文件
修改原有的 application.xml 文件,增加限流功能。在示例中,我们简单的限定在10秒内只允许进行3才访问。
1 | zuul: |
对比原来的 application.yaml 文件,可以看到只是在 zuul 配置段里增加了 ratelimit 的内容, **注意: policy-list 中的每一个配置项需要对应在 routes 中配置的路由名字。
运行并验证
运行项目,接着在浏览其中打开:
1 | http://localhost:9098/api/todo/todo |
第一次看到正确结果后,快速刷新浏览器,可以看到,在30秒内多于三次时,页面如下返回错误信息:
1 | Whitelabel Error Page |
后台也可以看到抛出了 ZuulException 异常
1 | o.s.c.n.z.filters.post.SendErrorFilter : Error during filtering |