網(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: 5s
2. 每個(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è)參考,也希望大家多多支持腳本之家。

java 圖片驗(yàn)證碼的實(shí)現(xiàn)代碼

SpringBoot數(shù)據(jù)訪問自定義使用Druid數(shù)據(jù)源的方法

最新IDEA?2022基于JVM極致優(yōu)化?IDEA啟動(dòng)速度的方法

SpringBoot3+ShardingJDBC5.5.0 讀寫分離配置的實(shí)現(xiàn)

java編程兩種樹形菜單結(jié)構(gòu)的轉(zhuǎn)換代碼

使用Springboot實(shí)現(xiàn)健身房管理系統(tǒng)