網(wǎng)關(guān)Spring Cloud Gateway HTTP超時(shí)配置問題
本文Spring Cloud Gateway 版本:2020.0.0
可以為所有路由配置Http超時(shí)(響應(yīng)和連接),并為每個(gè)特定路由覆蓋Http超時(shí)。
1. 全局超時(shí)
要配置全局http超時(shí):
- connect-timeout必須以毫秒為單位指定。
- response-timeout必須指定為java.time.Duration
全局http超時(shí)示例
spring:
cloud:
gateway:
httpclient:
connect-timeout: 1000
response-timeout: 5s2. 每個(gè)路由超時(shí)
要配置每個(gè)路由超時(shí):
- connect-timeout必須以毫秒為單位指定。
- response-timeout必須以毫秒為單位指定。
通過配置每個(gè)路由的HTTP超時(shí)
- id: per_route_timeouts
uri: https://example.org
predicates:
- name: Path
args:
pattern: /delay/{timeout}
metadata:
response-timeout: 200
connect-timeout: 200使用Java DSL的每個(gè)路由超時(shí)配置
import static org.springframework.cloud.gateway.support.RouteMetadataUtils.CONNECT_TIMEOUT_ATTR;
import static org.springframework.cloud.gateway.support.RouteMetadataUtils.RESPONSE_TIMEOUT_ATTR;
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder routeBuilder){
return routeBuilder.routes()
.route("test1", r -> {
return r.host("*.somehost.org").and().path("/somepath")
.filters(f -> f.addRequestHeader("header1", "header-value-1"))
.uri("http://someuri")
.metadata(RESPONSE_TIMEOUT_ATTR, 200)
.metadata(CONNECT_TIMEOUT_ATTR, 200);
})
.build();
}3. Fluent Java Routes API
為了在Java中進(jìn)行簡單的配置,該RouteLocatorBuilderbean包含了一個(gè)流暢的API。
以下清單顯示了它的工作方式:
// static imports from GatewayFilters and RoutePredicates
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder, ThrottleGatewayFilterFactory throttle) {
return builder.routes()
.route(r -> r.host("**.abc.org").and().path("/image/png")
.filters(f ->
f.addResponseHeader("X-TestHeader", "foobar"))
.uri("http://httpbin.org:80")
)
.route(r -> r.path("/image/webp")
.filters(f ->
f.addResponseHeader("X-AnotherHeader", "baz"))
.uri("http://httpbin.org:80")
.metadata("key", "value")
)
.route(r -> r.order(-1)
.host("**.throttle.org").and().path("/get")
.filters(f -> f.filter(throttle.apply(1,
1,
10,
TimeUnit.SECONDS)))
.uri("http://httpbin.org:80")
.metadata("key", "value")
)
.build();
}這種樣式還允許更多自定義謂詞斷言。
RouteDefinitionLocatorbean定義的謂詞使用邏輯組合and。
通過使用流利的Java API,你可以使用and(),or()以及negate()對運(yùn)營Predicate類。
4. DiscoveryClient路由定義定位器
您可以將網(wǎng)關(guān)配置為基于在DiscoveryClient兼容服務(wù)注冊表中注冊的服務(wù)來創(chuàng)建路由。
要啟用此功能,請?jiān)O(shè)置spring.cloud.gateway.discovery.locator.enabled=true并確保DiscoveryClient在類路徑上啟用了某個(gè)實(shí)現(xiàn)(例如Netflix Eureka,Consul或Zookeeper)。
4.1 DiscoveryClient路由配置謂詞和過濾器
默認(rèn)情況下,網(wǎng)關(guān)為使用所創(chuàng)建的路由定義單個(gè)謂詞和過濾器DiscoveryClient。
默認(rèn)謂詞是使用模式定義的路徑謂詞/serviceId/**,其中serviceId是來自的服務(wù)ID DiscoveryClient。
默認(rèn)的過濾器是帶有正則表達(dá)式/serviceId/(?<remaining>.*)和替換的重寫路徑過濾器/${remaining}。這會在將請求發(fā)送到下游之前從路徑中剝離服務(wù)ID。
如果要自定義DiscoveryClient路線使用的謂詞或過濾器,請?jiān)O(shè)置spring.cloud.gateway.discovery.locator.predicates[x]和spring.cloud.gateway.discovery.locator.filters[y]。
這樣做時(shí),如果要保留該功能,則需要確保包括前面顯示的默認(rèn)謂詞和過濾器。
下面的示例顯示其外觀:
spring.cloud.gateway.discovery.locator.predicates[0].name: Path
spring.cloud.gateway.discovery.locator.predicates[0].args[pattern]: "'/'+serviceId+'/**'"
spring.cloud.gateway.discovery.locator.predicates[1].name: Host
spring.cloud.gateway.discovery.locator.predicates[1].args[pattern]: "'**.foo.com'"
spring.cloud.gateway.discovery.locator.filters[0].name: CircuitBreaker
spring.cloud.gateway.discovery.locator.filters[0].args[name]: serviceId
spring.cloud.gateway.discovery.locator.filters[1].name: RewritePath
spring.cloud.gateway.discovery.locator.filters[1].args[regexp]: "'/' + serviceId + '/(?<remaining>.*)'"
spring.cloud.gateway.discovery.locator.filters[1].args[replacement]: "'/${remaining}'"總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
maven倉庫中心mirrors配置多個(gè)下載中心(執(zhí)行最快的鏡像)
這篇文章主要介紹了maven倉庫中心mirrors配置多個(gè)下載中心(執(zhí)行最快的鏡像),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
詳解 JAVA的回調(diào)機(jī)制CallBack
最近學(xué)習(xí)java,接觸到了回調(diào)機(jī)制(CallBack)。初識時(shí)感覺比較混亂,而且在網(wǎng)上搜索到的相關(guān)的講解,要么一言帶過,要么說的比較單純的像是給CallBack做了一個(gè)定義,本文給大家介紹JAVA的回調(diào)機(jī)制CallBack,感興趣的朋友一起學(xué)習(xí)2016-04-04
springboot集成opencv實(shí)現(xiàn)人臉識別功能的詳細(xì)步驟
大家都知道OpenCV是一個(gè)基于BSD許可(開源)發(fā)行的跨平臺計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫,可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上今天通過本文給大家分享springboot集成opencv實(shí)現(xiàn)人臉識別,感興趣的朋友一起看看吧2021-06-06
java實(shí)現(xiàn)統(tǒng)計(jì)字符串中字符及子字符串個(gè)數(shù)的方法示例
這篇文章主要介紹了java實(shí)現(xiàn)統(tǒng)計(jì)字符串中字符及子字符串個(gè)數(shù)的方法,涉及java針對字符串的遍歷、判斷及運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-01-01
IDEA部署JavaWeb項(xiàng)目到Tomcat服務(wù)器的方法
這篇文章主要介紹了IDEA部署JavaWeb項(xiàng)目到Tomcat服務(wù)器的方法,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-06-06

