W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
redis實現(xiàn)基于Stripe所做的工作。它需要使用spring-boot-starter-data-redis-reactive
Spring Boot起動器。
使用的算法是令牌桶算法。
redis-rate-limiter.replenishRate
是您希望用戶每秒允許多少個請求,而沒有任何丟棄的請求。這是令牌桶被填充的速率。
redis-rate-limiter.burstCapacity
是允許用戶在一秒鐘內(nèi)執(zhí)行的最大請求數(shù)。這是令牌桶可以容納的令牌數(shù)。將此值設(shè)置為零將阻止所有請求。
通過在replenishRate
和burstCapacity
中設(shè)置相同的值可以達到穩(wěn)定的速率。通過將burstCapacity
設(shè)置為高于replenishRate
,可以允許臨時突發(fā)。
在這種情況下,速率限制器需要在突發(fā)之間間隔一段時間(根據(jù)replenishRate
),因為2個連續(xù)的突發(fā)將導(dǎo)致請求丟失(HTTP 429 - Too Many Requests
)。
application.yml。
spring: cloud: gateway: routes: - id: requestratelimiter_route uri: https://example.org filters: - name: RequestRateLimiter args: redis-rate-limiter.replenishRate: 10 redis-rate-limiter.burstCapacity: 20
Config.java。
@Bean KeyResolver userKeyResolver() { return exchange -> Mono.just(exchange.getRequest().getQueryParams().getFirst("user")); }
這定義了每個用戶10的請求速率限制。允許20個突發(fā),但是下一秒只有10個請求可用。KeyResolver
是一個簡單的參數(shù),它獲取user
請求參數(shù)(注意:不建議在生產(chǎn)中使用)。
速率限制器也可以定義為實現(xiàn)RateLimiter
接口的bean。在配置中,使用SpEL通過名稱引用bean。#{@myRateLimiter}
是一個SpEL表達式,引用名稱為myRateLimiter
的bean。
application.yml。
spring: cloud: gateway: routes: - id: requestratelimiter_route uri: https://example.org filters: - name: RequestRateLimiter args: rate-limiter: "#{@myRateLimiter}" key-resolver: "#{@userKeyResolver}"
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: