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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM