真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

springcloud2.x版本Gateway熔斷、限流教程

前言

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括西烏珠穆沁網(wǎng)站建設(shè)、西烏珠穆沁網(wǎng)站制作、西烏珠穆沁網(wǎng)頁(yè)制作以及西烏珠穆沁網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,西烏珠穆沁網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到西烏珠穆沁省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

本文采用Spring cloud本文為2.1.8RELEASE,version=Greenwich.SR3
spring cloud 2.x版本 Gateway熔斷、限流教程

概術(shù)

在高并發(fā)應(yīng)用中,緩存、限流、降級(jí),是我們保護(hù)系統(tǒng)應(yīng)用的三大利器。在開發(fā)一些api接口的時(shí)候,通常也會(huì)在網(wǎng)關(guān)層做限流控制,一方面是為了防止大量的請(qǐng)求是服務(wù)器過載,導(dǎo)致服務(wù)器不可用,另一方面也是防止其他人的惡習(xí)網(wǎng)絡(luò)***。

常見的限流方式,如Hystrix的使用線程池隔離,超過線程池的負(fù)載走熔斷的邏輯;也有通過滑動(dòng)的時(shí)間窗口來控制流量。

常用的限流算法有,計(jì)數(shù)器算法、漏桶算法、令牌桶算法,這里就不對(duì)相關(guān)算法進(jìn)行描述。

熔斷

Spring Cloud Gateway的熔斷可以基于Hystrix實(shí)現(xiàn)。

1.1 增加pom相關(guān)依賴**


 org.springframework.cloud
 spring-cloud-starter-netflix-hystrix

1.2 修改application.yml**

server:
 port: 8100
spring:
 redis:
 host: localhost
 port: 6379
 application:
 name: spring-gateway
 cloud:
 gateway:
 discovery:
 locator:
 enabled: true # 開啟通過服務(wù)中心的自動(dòng)根據(jù) serviceId 創(chuàng)建路由的功能
 default-filters:
 - My=true
 routes:
 - id: ribbon-route
 uri: lb://EUREKA-RIBBON
 order: 0
 predicates:
 - Path=/ribbon/**
 filters:
 - name: Hystrix
 args:
 name: fallback
 fallbackUri: forward:/fallback
 - StripPrefix=1 #去掉前綴,具體實(shí)現(xiàn)參考StripPrefixGatewayFilterFactory
 - AddResponseHeader=X-Response-Default-Foo, Default-Bar
 - id: feign-route
 uri: lb://EUREKA-FEIGN
 order: 0
 predicates:
 - Path=/feign/**
 filters:
 - StripPrefix=1
 - AddResponseHeader=X-Response-Default-Foo, Default-Bar
eureka:
 instance:
 hostname: eureka1.server.com
 lease-renewal-interval-in-seconds: 5
 lease-expiration-duration-in-seconds: 10
 client:
 service-url:
 defaultZone: http://eureka1.server.com:8701/eureka/,http://eureka2.server.com:8702/eureka/,http://eureka3.server.com:8703/eureka/

只設(shè)置ribbon的路由熔斷,feign設(shè)置和ribbon相同。

Hystrix支持兩個(gè)參數(shù):

name:即HystrixCommand的名字

fallbackUri:fallback對(duì)應(yīng)的uri,這里的uri僅支持forward:schemed

1.3 創(chuàng)建FallBackController

package spring.cloud.demo.spring.gateway.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class FallBackController {
 @GetMapping("/fallback")
 public String fallback() {
 return "Error:fallback";
 }

}

1.4 啟動(dòng)相關(guān)服務(wù)

啟動(dòng)eureka-server、eureka-client、eureka-ribbon、spring-gateway相關(guān)服務(wù),訪問 http://localhost :8100/ribbon/sayHello地址,頁(yè)面顯示結(jié)果如下:

spring cloud 2.x版本 Gateway熔斷、限流教程
然后我們將eureka-ribbon服務(wù)停掉,刷新頁(yè)面,返回結(jié)果如下:
spring cloud 2.x版本 Gateway熔斷、限流教程
至此:熔斷的簡(jiǎn)單配置實(shí)現(xiàn)就完成了,如需自定義熔斷策略可以參考HystrixGatewayFilter的內(nèi)容。

限流

Spring Cloud Gateway官方提供了RequestRateLimiterGatewayFilterFactory類,使用redis和lua腳本來實(shí)現(xiàn)令牌桶的方式。我們也可以基于Google Guava中的RateLimiter、Bucket4j、RateLimitJ來實(shí)現(xiàn)。本文將采用官方提供的方式來實(shí)現(xiàn)。

1.1 增加pom相關(guān)依賴


 org.springframework.boot
 spring-boot-starter-data-redis-reactive

1.2 修改application.yml配置

server:
 port: 8100
spring:
 redis:
 host: localhost
 port: 6379
 application:
 name: spring-gateway
 cloud:
 gateway:
 discovery:
 locator:
 enabled: true # 開啟通過服務(wù)中心的自動(dòng)根據(jù) serviceId 創(chuàng)建路由的功能
 default-filters:
 - My=true
 routes:
 - id: ribbon-route
 uri: lb://EUREKA-RIBBON
 order: 0
 predicates:
 - Path=/ribbon/**
 filters:
 - name: RequestRateLimiter
 args:
 key-resolver: '#{@ipKeyResolver}'
 redis-rate-limiter.replenishRate: 200
 redis-rate-limiter.burstCapacity: 400
 - name: Hystrix
 args:
 name: fallback
 fallbackUri: forward:/fallback
 - StripPrefix=1 #去掉前綴,具體實(shí)現(xiàn)參考StripPrefixGatewayFilterFactory
 - AddResponseHeader=X-Response-Default-Foo, Default-Bar
 - id: feign-route
 uri: lb://EUREKA-FEIGN
 order: 0
 predicates:
 - Path=/feign/**
 filters:
 - StripPrefix=1
 - AddResponseHeader=X-Response-Default-Foo, Default-Bar
eureka:
 instance:
 hostname: eureka1.server.com
 lease-renewal-interval-in-seconds: 5
 lease-expiration-duration-in-seconds: 10
 client:
 service-url:
 defaultZone: http://eureka1.server.com:8701/eureka/,http://eureka2.server.com:8702/eureka/,http://eureka3.server.com:8703/eureka/

說明:

1 增加redis相關(guān)配置

2.1 -name: RequestRateLimiter, filter的名稱,必須是RequestRateLimiter

2.2 redis-rate-limiter.replenishRate: 允許用戶每秒處理的請(qǐng)求個(gè)數(shù)

2.3 redis-rate-limiter.burstCapacity: 令牌桶的容量,允許在一秒內(nèi)完成的最大請(qǐng)求數(shù)

2.4 key-resolver: 使用的Bean名稱,規(guī)則為按名稱引用Bean

1.3 增加限流Bean

package spring.cloud.demo.spring.gateway.config;
import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import reactor.core.publisher.Mono;
@Configuration
public class BeanConfig {
 @Bean
 public KeyResolver ipKeyResolver() {
 return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostName());
 }
}

這里設(shè)置的是ip的限流。

1.4 啟動(dòng)相關(guān)服務(wù)

首先啟動(dòng)redis服務(wù),然后順序啟動(dòng)eureka-server、eureka-client、eureka-ribbon、spring-gateway相關(guān)服務(wù),訪問 http://localhost:8100/ribbon/sayHello。為了演示方便可以將redis-rate-limiter.replenishRate和redis-rate-limiter.burstCapacity參數(shù)設(shè)置成1和3,然后瘋狂刷新頁(yè)面可以看到有請(qǐng)求失敗的情況(最好使用壓測(cè)工具來演示)。同時(shí)我們還要打開redis的監(jiān)控(monitor命令),可以看到redis的監(jiān)控,如下:
spring cloud 2.x版本 Gateway熔斷、限流教程
說明:redis中會(huì)有2個(gè)key,request_rate_limiter.{xxx}.timestamp和request_rate_limiter.{xxx}.tokens

總結(jié)

本文簡(jiǎn)單的實(shí)現(xiàn)了Gateway的熔斷和限流??傮w來說Spring Cloud Gateway提供的路由網(wǎng)關(guān)、過濾器、熔斷、限流還是都比較簡(jiǎn)單,也非常靈活,可以根據(jù)自己的需求來自定義。


網(wǎng)站題目:springcloud2.x版本Gateway熔斷、限流教程
當(dāng)前路徑:http://weahome.cn/article/ipspss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部