zuul实现限流
zuul限流
限流算法
- 漏桶:
leakey bucket
,原理:桶的下方的小孔会以一个相对恒定的速率漏水,而不管入桶的水流量,这样就达到了控制出水口的流量 - 令牌桶:
token bucket
,原理:以相对恒定的速率向桶中加入令牌,请求来时于桶中取令牌,取到了就放行,没能取到令牌的请求则丢弃
限流粒度
粗粒度
- 网关限流
- 单个服务
细粒度
- user: 认证用户或者匿名,针对某个用户粒度进行限流
- origin: 客户机的IP,针对请求客户机的IP进行限流
- url: 特定url,针对请求的url粒度进行限流
- serviceId: 特定服务,针对某个服务的id粒度进行限流
实现
从单个服务的角度实现限流,原理:利用redis键过期的自动删除的特性。以url为key,如果key不存在,创建key,并设置键过期时间,相同请求过来就对这个key进行计数,使用redis.incr原子方法,当请求超过limit时,则不让请求api。
1.定义注解:
2.定义切面
3.redis配置:
4.api服务:
5.工具类:
6.maven依赖: