весна-облако-ворота ||необходимо настроить глобальный уровень и уровень приложения и время ожидания уровня API - PullRequest
0 голосов
/ 05 июня 2018

Я работаю в 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

Есть идеи, как это сделать?

...