• Zuul上实现限流(spring-cloud-zuul-ratelimit)


    简述

    Spring Cloud Zuul RateLimit项目Github地址:

    https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit

    该包实现了在Zuul对每个服务进行限流。提供的几种限流方式:

    1. 认证用户(Authenticated User)

    使用已认证的用户名(username)或'anonymous'

    2. 原始请求(Request Origin)

    使用用户的原始请求

    3. URL

    使用上游请求的地址

    4. 针对每个服务的全局配置

    该方式不会验证Request Origin,Authenticated User或URL

    使用该方式只需不设置‘type’参数即可

    使用方式

    pom.xml增加依赖:

    <dependency>

          <groupId>com.marcosbarbero.cloud</groupId>

          <artifactId>spring-cloud-zuul-ratelimit</artifactId>

          <version>1.3.2.RELEASE</version>

    </dependency>

    配置示例:

    zuul:

        ratelimit:

            key-prefix: your-prefix  #对应用来标识请求的key的前缀

            enabled: true

            repository: REDIS  #对应存储类型(用来存储统计信息)

            behind-proxy: true  #代理之后

            default-policy: #可选 - 针对所有的路由配置的策略,除非特别配置了policies

                 limit: 10 #可选 - 每个刷新时间窗口对应的请求数量限制

                 quota: 1000 #可选-  每个刷新时间窗口对应的请求时间限制(秒)

                  refresh-interval: 60 # 刷新时间窗口的时间,默认值 (秒)

                   type: #可选 限流方式

                        - user

                        - origin

                        - url

              policies:

                    myServiceId: #特定的路由

                          limit: 10 #可选- 每个刷新时间窗口对应的请求数量限制

                          quota: 1000 #可选-  每个刷新时间窗口对应的请求时间限制(秒)

                          refresh-interval: 60 # 刷新时间窗口的时间,默认值 (秒)

                          type: #可选 限流方式

                              - user

                              - origin

                              - url

    通用应用程序配置

    配置命名空间:zuul.ratelimit

    说明:使用不同的repository,需要在pom中加入相关的依赖包。

    Policy属性:

    测试

    1. 启动一个Zuul服务和一个API服务,配置正常的路由规则。访问API:

    2. 按照上面的使用方式,重新启动配置有RateLimit的Zuul。相关配置:

    3. 在postman中集中运行12次相同的API调用,结果中有两次调用返回429:

    4. 查看对应的Response Headers和Body的信息:

    自定义Key策略

    如果希望自己控制key的策略,可以通过自定义RateLimitKeyGenerator的实现来增加自己的策略逻辑。

    实例:

    根据请求上的参数来对请求进行限流。比如有一个请求是http://localhost:8765/api-a//hello2?name=kevin,对相同的name值进行限流。我们设置了1分钟内,限流10次,那么如果1分钟内,name是kevin的请求超过10次,就会发生限流。

    RateLimitKeyGenerator的实现:

    测试

    同时发送13个请求,其中name=kevin的有11次,name=marry的有2次,测试结果如下:



    作者:zlup
    链接:https://www.jianshu.com/p/d165e12df1da
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    day36 08-Hibernate抓取策略:批量抓取
    day36 07-Hibernate抓取策略:many-to-one上的抓取策略
    day36 06-Hibernate抓取策略:set集合上的抓取策略
    day36 05-Hibernate检索方式:离线条件查询
    day36 04-Hibernate检索方式:多表连接查询
    day36 03-Hibernate检索方式:排序、参数绑定、投影查询
    【收集】11款Linux数据恢复工具
    【收集】11款Linux数据恢复工具
    7个免费的Linux FTP客户端工具
    7个免费的Linux FTP客户端工具
  • 原文地址:https://www.cnblogs.com/tiancai/p/9623063.html
Copyright © 2020-2023  润新知