因为所有的对外提供的接口都是要经过Zuul的转发,所以在这里的Pre过滤器里面做限流是最好的。
常用的限流算法有
1.计数器法,可以看做是低精度的滑动窗口算法
2.滑动窗口,需要更多的存储空间
3.漏桶算法,
4.令牌桶算法,运行流量在一定程度上的突发,实践简单,对用户更友好,采用得更多。
我这里采用的就是令牌桶算法,其原理如下
guava里面有令牌桶算法的实现
在浏览器多刷几次就会被限流给禁止访问了
代码: https://github.com/hmilyos/springCloud-api-gateway.git rateLimit分支
限流的代码之所以这么少,是因为利用了现有的工具包,推荐下面这个限流控制,感觉挺不错的,有空值得研究一下https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit