Golang?throttled基于GCRA速率限制庫使用探索
Throttled包
Throttled包實現(xiàn)了對HTTP端點等資源的速率限制訪問。它使用通用信元速率算法(GCRA)來限制對資源(如HTTP端點)的訪問,從而實現(xiàn)速率限制。
2.0.0版本對節(jié)流API進行了一些重大更改。如果此更改破壞了您的代碼,或者您希望保留舊API的功能,請打開一個問題。我們不保證會有任何特定的更改,但希望了解更多關(guān)于用戶需求的信息。
安裝
import ( “github.com/throttled/sthrottled/v2” )
然后,任何標(biāo)準(zhǔn)的Go工具,如構(gòu)建、測試,都會自動找到包。您也可以使用go-get將其拉入您的項目中:
go get -u github.com/throttled/throttled/v2
如果你以前使用了throttled,現(xiàn)在推薦你升級到最新版本,并升級到含有context的新函數(shù)接口。
下面的函數(shù)可進行替換:
memstore.New => memstore.NewCtx goredisstore.New => goredisstore.NewCtx redigostore.New => redigostore.NewCtx throttled.NewGCRARateLimiter => throttled.NewGCRARateLimiterCtx throttled.HTTPRateLimiter => throttled.HTTPRateLimiterCtx
請注意,并非所有store都使用了context.Context。
HTTPLimiter用于對http進行速率限制訪問的用法
此示例演示了HTTPLimiter用于對http進行速率限制訪問的用法。每分鐘每條路徑最多可處理20個請求,最多可處理5個附加請求:
package main import ( "fmt" "log" "net/http" "github.com/throttled/throttled/v2" "github.com/throttled/throttled/v2/store/memstore" ) func myHandlerFunc(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, world") } func main() { store, err := memstore.NewCtx(65536) if err != nil { log.Fatal(err) } quota := throttled.RateQuota{ MaxRate: throttled.PerMin(20), MaxBurst: 5, } rateLimiter, err := throttled.NewGCRARateLimiterCtx(store, quota) if err != nil { log.Fatal(err) } httpRateLimiter := throttled.HTTPRateLimiterCtx{ RateLimiter: rateLimiter, VaryBy: &throttled.VaryBy{Path: true}, } handler := http.HandlerFunc(myHandlerFunc) http.ListenAndServe(":8080", httpRateLimiter.RateLimit(handler)) }
我們經(jīng)常在使用第三方API時,會看到這樣的提示,該接口頻率限制限額,請合理安排業(yè)務(wù)調(diào)用,特別是token的請求,經(jīng)常會要求你緩存到本地,如果我們的項目供他人使用,也有速率限制時,可以集成這個庫方便的完成需求。
Github地址:
https://github.com/throttled/throttled
以上就是Golang throttled基于GCRA速率限制庫使用探索的詳細內(nèi)容,更多關(guān)于Golang throttled GCRA速率限制的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Golang發(fā)送Get和Post請求的實現(xiàn)
做第三方接口有時需要用Get或者Post請求訪問,本文主要介紹了Golang發(fā)送Get和Post請求的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05go語言之給定英語文章統(tǒng)計單詞數(shù)量(go語言小練習(xí))
這篇文章給大家分享go語言小練習(xí)給定英語文章統(tǒng)計單詞數(shù)量,實現(xiàn)思路大概是利用go語言的map類型,以每個單詞作為關(guān)鍵字存儲數(shù)量信息,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2020-01-01golang替換無法顯示的特殊字符(\u0000,?\000,?^@)
這篇文章主要介紹了golang替換無法顯示的特殊字符,包括的字符有\(zhòng)u0000,?\000,?^@等,下文詳細資料,需要的小伙伴可以參考一下2022-04-04