Всегда ли выполняются глобальные фильтры Spring Cloud Gateway? - PullRequest
0 голосов
/ 24 сентября 2018

Я писал глобальный фильтр в Spring Cloud Gateway, который создает ресурс, который должен быть доступен для всех последующих фильтров (т. Е. Диапазон OpenCensus, но это здесь не важно) и должен быть закрыт после того, как ответ был написан.

В документации упоминаются глобальные фильтры, включая секции pre и post, но у меня есть ощущение, что мой подход может оставить открытые промежутки, если есть какие-либо исключения во время обычной обработки запроса, то есть после выполнения части "pre"фильтр, но перед частью "post".

Вот мой фрагмент:

@Bean
@Order(0)
public GlobalFilter createSpan() {
    return (exchange, chain) -> {
        /* PRE */
        SomethingCloseable resource = Factory.createResource();
        exchange.getAttributes().put(THE_RESOURCE, resource);
        return chain.filter(exchange).then(Mono.fromRunnable(/* POST */ resource::close));
    };
}

В терминах OpenCensus, диапазоны всегда заключаются в документацию try/catch/finally, а closeвызов всегда выполняется в блоке finally.

Таким образом, здесь актуален вопрос: будет ли выполнен вызов Closeable#close, если во время обработки запроса произойдет необработанное исключение, например, в других фильтрах?

...