日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微服务网关限流讲解

發布時間:2024/4/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微服务网关限流讲解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用令牌桶進行請求次數限流

spring cloud gateway 默認使用redis的RateLimter限流算法來實現。所以我們要使用首先需要引入redis的依賴

(1)引入redis依賴

在gateway的pom.xml中引入redis的依賴

<!--redis--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis-reactive</artifactId><version>2.1.3.RELEASE</version> </dependency>

(2)定義KeyResolver

在Applicatioin引導類中添加如下代碼,KeyResolver用于計算某一個類型的限流的KEY也就是說,可以通過KeyResolver來指定限流的Key。

我們可以根據IP來限流,比如每個IP每秒鐘只能請求一次,在GatewayWebApplication定義key的獲取,獲取客戶端IP,將IP作為key,如下代碼:

/**** IP限流* @return*/ @Bean(name="ipKeyResolver") public KeyResolver userKeyResolver() {return new KeyResolver() {@Overridepublic Mono<String> resolve(ServerWebExchange exchange) {//獲取遠程客戶端IPString hostName = exchange.getRequest().getRemoteAddress().getAddress().getHostAddress();System.out.println("hostName:"+hostName);return Mono.just(hostName);}}; }

配置代碼如下:

spring:cloud:gateway:globalcors:corsConfigurations:'[/**]': # 匹配所有請求allowedOrigins: "*" #跨域處理 允許所有的域allowedMethods: # 支持的方法- GET- POST- PUT- DELETEroutes:- id: goods_routeuri: lb://goodspredicates:- Path=/api/brand**filters:- StripPrefix=1- name: RequestRateLimiter #請求數限流 名字不能隨便寫 ,使用默認的facatoryargs:key-resolver: "#{@ipKeyResolver}"redis-rate-limiter.replenishRate: 1redis-rate-limiter.burstCapacity: 1application:name: gateway-web#Redis配置redis:host: 192.168.211.132port: 6379server:port: 8001 eureka:client:service-url:defaultZone: http://127.0.0.1:7001/eurekainstance:prefer-ip-address: true management:endpoint:gateway:enabled: trueweb:exposure:include: true

解釋:

redis-rate-limiter.replenishRate是您希望允許用戶每秒執行多少請求,而不會丟棄任何請求。這是令牌桶填充的速率

redis-rate-limiter.burstCapacity是指令牌桶的容量,允許在一秒鐘內完成的最大請求數,將此值設置為零將阻止所有請求。

key-resolver: "#{@ipKeyResolver}" 用于通過SPEL表達式來指定使用哪一個KeyResolver.

如上配置:

表示 一秒內,允許 一個請求通過,令牌桶的填充速率也是一秒鐘添加一個令牌。

最大突發狀況 也只允許 一秒內有一次請求,可以根據業務來調整 。

?

多次請求會發生如下情況

?

總結

以上是生活随笔為你收集整理的微服务网关限流讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。