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依赖:

 

posted @ 2024-02-08 10:12  追云逐梦  阅读(147)  评论(0编辑  收藏  举报