網(wǎng)關(guān)Spring Cloud Gateway HTTP超時(shí)配置問(wèn)題
本文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必須以毫秒為單位指定。
通過(guò)配置每個(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)行簡(jiǎ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。
通過(guò)使用流利的Java API,你可以使用and(),or()以及negate()對(duì)運(yùn)營(yíng)Predicate類。
4. DiscoveryClient路由定義定位器
您可以將網(wǎng)關(guān)配置為基于在DiscoveryClient兼容服務(wù)注冊(cè)表中注冊(cè)的服務(wù)來(lái)創(chuàng)建路由。
要啟用此功能,請(qǐng)?jiān)O(shè)置spring.cloud.gateway.discovery.locator.enabled=true并確保DiscoveryClient在類路徑上啟用了某個(gè)實(shí)現(xiàn)(例如Netflix Eureka,Consul或Zookeeper)。
4.1 DiscoveryClient路由配置謂詞和過(guò)濾器
默認(rèn)情況下,網(wǎng)關(guān)為使用所創(chuàng)建的路由定義單個(gè)謂詞和過(guò)濾器DiscoveryClient。
默認(rèn)謂詞是使用模式定義的路徑謂詞/serviceId/**,其中serviceId是來(lái)自的服務(wù)ID DiscoveryClient。
默認(rèn)的過(guò)濾器是帶有正則表達(dá)式/serviceId/(?<remaining>.*)和替換的重寫(xiě)路徑過(guò)濾器/${remaining}。這會(huì)在將請(qǐng)求發(fā)送到下游之前從路徑中剝離服務(wù)ID。
如果要自定義DiscoveryClient路線使用的謂詞或過(guò)濾器,請(qǐng)?jiān)O(shè)置spring.cloud.gateway.discovery.locator.predicates[x]和spring.cloud.gateway.discovery.locator.filters[y]。
這樣做時(shí),如果要保留該功能,則需要確保包括前面顯示的默認(rèn)謂詞和過(guò)濾器。
下面的示例顯示其外觀:
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è)參考,也希望大家多多支持腳本之家。
java 圖片驗(yàn)證碼的實(shí)現(xiàn)代碼
SpringBoot數(shù)據(jù)訪問(wèn)自定義使用Druid數(shù)據(jù)源的方法
最新IDEA?2022基于JVM極致優(yōu)化?IDEA啟動(dòng)速度的方法
SpringBoot3+ShardingJDBC5.5.0 讀寫(xiě)分離配置的實(shí)現(xiàn)
java編程兩種樹(shù)形菜單結(jié)構(gòu)的轉(zhuǎn)換代碼
使用Springboot實(shí)現(xiàn)健身房管理系統(tǒng)

