Golang?throttled基于GCRA速率限制庫使用探索
Throttled包
Throttled包實(shí)現(xiàn)了對HTTP端點(diǎn)等資源的速率限制訪問。它使用通用信元速率算法(GCRA)來限制對資源(如HTTP端點(diǎn))的訪問,從而實(shí)現(xiàn)速率限制。
2.0.0版本對節(jié)流API進(jìn)行了一些重大更改。如果此更改破壞了您的代碼,或者您希望保留舊API的功能,請打開一個問題。我們不保證會有任何特定的更改,但希望了解更多關(guān)于用戶需求的信息。
安裝
import ( “github.com/throttled/sthrottled/v2” )
然后,任何標(biāo)準(zhǔn)的Go工具,如構(gòu)建、測試,都會自動找到包。您也可以使用go-get將其拉入您的項(xiàng)目中:
go get -u github.com/throttled/throttled/v2
如果你以前使用了throttled,現(xiàn)在推薦你升級到最新版本,并升級到含有context的新函數(shù)接口。
下面的函數(shù)可進(jìn)行替換:
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進(jìn)行速率限制訪問的用法
此示例演示了HTTPLimiter用于對http進(jìn)行速率限制訪問的用法。每分鐘每條路徑最多可處理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)常會要求你緩存到本地,如果我們的項(xiàng)目供他人使用,也有速率限制時,可以集成這個庫方便的完成需求。
Github地址:
https://github.com/throttled/throttled
以上就是Golang throttled基于GCRA速率限制庫使用探索的詳細(xì)內(nèi)容,更多關(guān)于Golang throttled GCRA速率限制的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Golang發(fā)送Get和Post請求的實(shí)現(xiàn)
做第三方接口有時需要用Get或者Post請求訪問,本文主要介紹了Golang發(fā)送Get和Post請求的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
golang中的三個點(diǎn) ''...''的用法示例詳解
這篇文章主要介紹了golang中的三個點(diǎn) '...' 的用法示例詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
go語言之給定英語文章統(tǒng)計單詞數(shù)量(go語言小練習(xí))
這篇文章給大家分享go語言小練習(xí)給定英語文章統(tǒng)計單詞數(shù)量,實(shí)現(xiàn)思路大概是利用go語言的map類型,以每個單詞作為關(guān)鍵字存儲數(shù)量信息,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2020-01-01
golang替換無法顯示的特殊字符(\u0000,?\000,?^@)
這篇文章主要介紹了golang替換無法顯示的特殊字符,包括的字符有\(zhòng)u0000,?\000,?^@等,下文詳細(xì)資料,需要的小伙伴可以參考一下2022-04-04

