Thi*_*mal 6 java spring spring-boot api-gateway spring-cloud-gateway
如何设置time-out
a spring cloud gateway
?
routeLocatorBuilder.routes()
.route("test-api", r -> r.path("/api/**")).uri(apiLb))
.route("test-doc", r -> r.path("/doc/**")).uri(docLb));
Run Code Online (Sandbox Code Playgroud)
有没有办法只为一个人设置一个超时ROUTE
- doc
.
Thi*_*mal 11
引用自 spring 文档
设置global time-out
spring:
cloud:
gateway:
httpclient:
connect-timeout: 1000
response-timeout: 5s
Run Code Online (Sandbox Code Playgroud)
每条路线超时:-
- id: per_route_timeouts
uri: https://example.org
predicates:
- name: Path
args:
pattern: /delay/{timeout}
metadata:
response-timeout: 200
connect-timeout: 200
Run Code Online (Sandbox Code Playgroud)
在 Java 中,添加以下 bean:
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();
}
@Bean
public ReactiveResilience4JCircuitBreakerFactory reactiveResilience4JCircuitBreakerFactory(
final CircuitBreakerRegistry circuitBreakerRegistry, final TimeLimiterRegistry timeLimiterRegistry) {
ReactiveResilience4JCircuitBreakerFactory reactiveResilience4JCircuitBreakerFactory = new
ReactiveResilience4JCircuitBreakerFactory(circuitBreakerRegistry, timeLimiterRegistry);
reactiveResilience4JCircuitBreakerFactory.configureDefault(id -> {
CircuitBreakerConfig circuitBreakerConfig = circuitBreakerRegistry.find(id).isPresent()
? circuitBreakerRegistry.find(id).get().getCircuitBreakerConfig()
: circuitBreakerRegistry.getDefaultConfig();
TimeLimiterConfig timeLimiterConfig = timeLimiterRegistry.find(id).isPresent()
? timeLimiterRegistry.find(id).get().getTimeLimiterConfig()
: timeLimiterRegistry.getDefaultConfig();
return new Resilience4JConfigBuilder(id).circuitBreakerConfig(circuitBreakerConfig)
.timeLimiterConfig(timeLimiterConfig).build();
});
return reactiveResilience4JCircuitBreakerFactory;
}
Run Code Online (Sandbox Code Playgroud)
如果您不使用 R4J 断路器或时间限制器,则接受的答案有效...但如果您这样做,上述设置将不够,实际上将被 R4J 设置覆盖。这里和这里对此进行了讨论,撰写本文时当前的解决方法可以在这里找到...基本上,您编写一个自定义 bean,以便它将遵循配置设置:
@Bean
public ReactiveResilience4JCircuitBreakerFactory reactiveResilience4JCircuitBreakerFactory(final CircuitBreakerRegistry circuitBreakerRegistry, final TimeLimiterRegistry timeLimiterRegistry) {
ReactiveResilience4JCircuitBreakerFactory reactiveResilience4JCircuitBreakerFactory = new ReactiveResilience4JCircuitBreakerFactory();
reactiveResilience4JCircuitBreakerFactory.configureCircuitBreakerRegistry(circuitBreakerRegistry);
reactiveResilience4JCircuitBreakerFactory.configureDefault(id -> {
CircuitBreakerConfig circuitBreakerConfig = circuitBreakerRegistry.find(id).isPresent() ? circuitBreakerRegistry.find(id).get().getCircuitBreakerConfig()
: circuitBreakerRegistry.getDefaultConfig();
TimeLimiterConfig timeLimiterConfig = timeLimiterRegistry.find(id).isPresent() ? timeLimiterRegistry.find(id).get().getTimeLimiterConfig()
: timeLimiterRegistry.getDefaultConfig();
return new Resilience4JConfigBuilder(id)
.circuitBreakerConfig(circuitBreakerConfig)
.timeLimiterConfig(timeLimiterConfig)
.build();
});
return reactiveResilience4JCircuitBreakerFactory;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17451 次 |
最近记录: |