上次介紹了使用Zuul通過一個過濾器實現權限校驗的功能。在互聯網應用高并發的情況下,由于請求數量過多可能導致服務器無法承載而出現故障。這種情況就需要對請求數量進行限制,讓系統在有限的請求數下正常運行。本篇將介紹如何通過Zuul-ratelimit對用戶請求進行限流。
系統配置
本篇不再贅述zuul API Gateway的配置和啟動了,只把為實現限流功能需要添加的配置進行介紹。感興趣的朋友可以到專欄中查看API網關的詳細配置。
1、 添加spring-cloud-zuul-ratelimit依賴。
2、 全局限流配置
zuul.ratelimit.enabled=true:限流開關,true打開限流。
zuul.ratelimit.default-policy.limit=5:全局限流策略,在一個單位時間窗口內的請求次數5次。
zuul.ratelimit.default-policy.quota=5:可選,在一個單位時間窗口內的請求時間5秒。
zuul.ratelimit.default-policy.refresh-interval=10:全局限流策略,一個單位時間窗口10秒。
以上配置描述的內容簡言之就是:在10秒內只允許訪問5次,如果10秒內訪問次數超過5,則會返回Too many requests。
3、 特定服務限流配置
zuul.ratelimit.policies.workflow.limit=2:服務限流策略,在一個單位時間窗口內請求的次數2次。
zuul.ratelimit.policies.workflow.quota=1:可選,在一個單位時間窗口內的請求時間5秒。
zuul.ratelimit.policies.workflow.refresh-interval=3:服務限流策略,一個單位時間窗口3秒。
以上配置簡言之就是:在workflow這個服務的請求上,3秒內允許訪問2次,如果3秒內訪問次數超過2,則返回Too many requests。這個3秒內限制2次請求只限于workflow這個路由對應的服務請求,其他服務的請求限流策略還是10秒內5次的限制。這就是全局和具體服務限流策略的區別。
其中重點是“workflow”,它是前面zuul已經配置過的路由,如下圖:
運行測試
好了,現在來測試一下。我們訪問/wf/workflow/getWorkflow這個地址,前兩次返回正常的結果。第3次返回如下:
以上即為通過zuul-ratelimit實現的全局和具體服務的限流配置策略。建議收藏。