Тайм-аут запроса GraphQL-java

Есть ли способ установить тайм-аут при выполнении запроса с помощью реализации GraphQL-java? Это кажется довольно простой мерой безопасности, рекомендованной документацией GraphQL, но я ничего не могу найти для этого.


person Daniel    schedule 29.10.2018    source источник


Ответы (1)


Для этого вы можете использовать инструментарий GraphQL Java.

В приведенном ниже примере устанавливается тайм-аут в 3 секунды для каждого сборщика данных. Вы можете использовать переданный экземпляр InstrumentationFieldFetchParameters, чтобы применить тайм-аут к определенным сборщикам данных (возможно, один в структуре запроса, если вы хотите тайм-аут для всего запроса).

public class TimeoutInstrumentation extends SimpleInstrumentation {
    @Override
    public DataFetcher<?> instrumentDataFetcher(
            DataFetcher<?> dataFetcher, InstrumentationFieldFetchParameters parameters
    ) {
        return environment ->
            Observable.fromCallable(() -> dataFetcher.get(environment))
                .subscribeOn(Schedulers.computation())
                .timeout(3, TimeUnit.SECONDS)
                .blockingFirst();
    }
}

Вы также можете использовать 2 существующих инструментария для выполнения других проверок, упомянутых на опубликованной вами странице:

Также есть возможность установить тайм-аут на уровне запроса. Однако это вне юрисдикции GraphQL Java. Если вы используете Spring в качестве http-сервера, вы можете установить тайм-аут глобального запроса, используя свойство spring.mvc.async.request-timeout application. Я почти уверен, что любой другой веб-сервер также будет иметь подобное свойство.

person felipe_gdr    schedule 13.11.2018
comment
Приятно, спасибо за подсказки! Я скоро это сделаю. - person Daniel; 14.11.2018