Я работаю в spring-cloud-gateway
проекте.Где мне нужно настроить глобальное время ожидания / таймаута на уровне приложения и API конкретного времени ожидания.Ниже приведены мои нижестоящие API-интерфейсы:
@RestController
public class TestController {
// Should have global time out
@GetMapping("/global")
public Mono<ResponseEntity> testGlobalTimeOut(
@RequestHeader(name = "cId") UUID cId,
@RequestParam(name = "someNumber", required = false) Number someNumber) {
// Map<String, Object> map = populate Some Map Logic
return Mono.just(new ResponseEntity(map, HttpStatus.OK));
}
// Should have application level time out
@GetMapping("/appname/count")
public Mono<ResponseEntity> testApplicationTimeOut_1(
@RequestHeader(name = "cId") UUID cId,
@RequestParam(name = "someNumber", required = false) Number someNumber) {
// Map<String, Object> map = populate Some Map Logic
return Mono.just(new ResponseEntity(map, HttpStatus.OK));
}
// Should have application level time out
@GetMapping("/appname/posts")
public Mono<ResponseEntity> testApplicationTimeOut_2(
@RequestHeader(name = "cId") UUID cId,
@RequestParam(name = "someNumber", required = false) Number someNumber) {
// Map<String, Object> map = populate Some Map Logic
return Mono.just(new ResponseEntity(map, HttpStatus.OK));
}
// Should have api level time out
@GetMapping("/appname/posts/{postId}")
public Mono<ResponseEntity> getAPITimeOutWithPathVariable(
@RequestHeader(name = "cId") UUID cId,
@PathVariable(name = "postId") String postId) {
// Map<String, Object> map = populate Some Map Logic
return Mono.just(new ResponseEntity(map, HttpStatus.OK));
}
}
Эти API-интерфейсы работают в качестве нисходящего сервиса.Ниже приведены мои конфигурации маршрутов для всех этих API в моем gateway-application
:
# ============ Application Timeout =============
- id: application_timeout_route_1
uri: http://localhost/appname/count
predicates:
- Path=/withapplicationtimeout1**
filters:
- Hystrix=appTimeOut
- id: application_timeout_route_2
uri: http://localhost/appname/posts
predicates:
- Path=/withapplicationtimeout2**
filters:
- Hystrix=appTimeOut
# ============ API Level Timeout ===========
- id: api_timeout_route
uri: http://localhost
predicates:
- Path=/withapitimeout/**
filters:
- Hystrix=apiTimeOut
- RewritePath=/withapitimeout/(?<segment>.*), /appname/posts/$\{segment}
# Global Timeout Configuration
#hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 30000
# Application Level Timeout Configuration
hystrix.command.appTimeOut.execution.isolation.thread.timeoutInMilliseconds: 30000
# API Level Timeout Configuration
hystrix.command.apiTimeOut.execution.isolation.thread.timeoutInMilliseconds: 15000
Теперь тайм-аут уровня приложения и тайм-аут уровня API работает нормально, но у меня нет никакого способа определить глобальныйТайм-аут фильтра.Документация по этому же еще не доступна:
https://github.com/spring-cloud/spring-cloud-gateway/blob/master/docs/src/main/asciidoc/spring-cloud-gateway.adoc#combined-global-filter-and-gatewayfilter-ordering
Есть идеи, как это сделать?