簡述:
Spring Cloud Zuul RateLimit項目Github地址:
/marcosbarbero/spring-cloud-zuul-ratelimit
該包實現了在Zuul對每個服務進行限流
微服務開發中有時需要對API做限流保護,防止網絡攻擊,比如做壹個短信驗證碼API,限制客戶端的請求速率能在壹定程度上抵禦短信轟炸攻擊,降低損失。微服務網關是每個請求的必經入口,非常適合做壹些API限流、認證之類的操作,本文介紹Zuul如何進行限流操作
個人建議:如果在網關做細粒度的限流,後面微服務業務變化的話網關也要跟著變,而且後面涉及到微服務之間的調用,這個網關限流做不了。所以在網關上不能做細粒度的限流,網關主要為服務器硬件設備的並發處理能力做限流,細粒度的限流還是交給專門的熔斷限流微服務去處理,這樣利於各微服務之間的解構和各團隊的協同開發
1、限流策略
2、可用的實現
Bucket4j實現需要相關的bean @Qualifier("RateLimit"):
3、常見的配置屬性
policy的相關屬性
4、發生錯誤如何處理
1、導入依賴
2、啟動類標註解
3、配置文件
4、啟動後進行訪問
由於我們配置的是壹秒只允許3個請求,當我們超過時,會拋出過多請求異常
5、自定義Key策略
如果希望自己控制key的策略,可以通過自定義RateLimitKeyGenerator的實現來增加自己的策略邏輯。
實例:
根據請求上的參數來對請求進行限流。比如有壹個請求是 http://localhost:9070/api-a//hello2?name=kevin ,對相同的name值進行限流。我們設置了1分鐘內,限流10次,那麽如果1分鐘內,name是kevin的請求超過10次,就會發生限流。
自定義RateLimitKeyGenerator的實現:
到此本文就結束啦!
參考: