上次介紹了使用Zuul通過一個過濾器實現(xiàn)權(quán)限校驗的功能。在互聯(lián)網(wǎng)應(yīng)用高并發(fā)的情況下,由于請求數(shù)量過多可能導(dǎo)致服務(wù)器無法承載而出現(xiàn)故障。這種情況就需要對請求數(shù)量進行限制,讓系統(tǒng)在有限的請求數(shù)下正常運行。本篇將介紹如何通過Zuul-ratelimit對用戶請求進行限流。
系統(tǒng)配置
本篇不再贅述zuul API Gateway的配置和啟動了,只把為實現(xiàn)限流功能需要添加的配置進行介紹。感興趣的朋友可以到專欄中查看API網(wǎng)關(guān)的詳細(xì)配置。

1、 添加spring-cloud-zuul-ratelimit依賴。

2、 全局限流配置

zuul.ratelimit.enabled=true:限流開關(guān),true打開限流。
zuul.ratelimit.default-policy.limit=5:全局限流策略,在一個單位時間窗口內(nèi)的請求次數(shù)5次。
zuul.ratelimit.default-policy.quota=5:可選,在一個單位時間窗口內(nèi)的請求時間5秒。
zuul.ratelimit.default-policy.refresh-interval=10:全局限流策略,一個單位時間窗口10秒。
以上配置描述的內(nèi)容簡言之就是:在10秒內(nèi)只允許訪問5次,如果10秒內(nèi)訪問次數(shù)超過5,則會返回Too many requests。
3、 特定服務(wù)限流配置

zuul.ratelimit.policies.workflow.limit=2:服務(wù)限流策略,在一個單位時間窗口內(nèi)請求的次數(shù)2次。
zuul.ratelimit.policies.workflow.quota=1:可選,在一個單位時間窗口內(nèi)的請求時間5秒。
zuul.ratelimit.policies.workflow.refresh-interval=3:服務(wù)限流策略,一個單位時間窗口3秒。
以上配置簡言之就是:在workflow這個服務(wù)的請求上,3秒內(nèi)允許訪問2次,如果3秒內(nèi)訪問次數(shù)超過2,則返回Too many requests。這個3秒內(nèi)限制2次請求只限于workflow這個路由對應(yīng)的服務(wù)請求,其他服務(wù)的請求限流策略還是10秒內(nèi)5次的限制。這就是全局和具體服務(wù)限流策略的區(qū)別。
其中重點是“workflow”,它是前面zuul已經(jīng)配置過的路由,如下圖:

運行測試
好了,現(xiàn)在來測試一下。我們訪問/wf/workflow/getWorkflow這個地址,前兩次返回正常的結(jié)果。第3次返回如下:

以上即為通過zuul-ratelimit實現(xiàn)的全局和具體服務(wù)的限流配置策略。建議收藏。