Запускает ли GraphQL#execute все сборщики данных в одном потоке? Делегировано ли асинхронное поведение реализации DataFetcher?

Если все мои сборщики данных возвращают POJO напрямую вместо CompletableFuture, будет ли все выполнение GraphQL происходить в одном потоке?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
2
0
694
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

да. Исходя из того, что я вижу из исходных кодов, если все сборщики данных возвращают только POJO, все выполнение будет выполняться в одном потоке.

Чтобы настроить сборщики данных для параллельной работы, вы должны использовать ExecutionStrategy, который поддерживает асинхронную обработку. Используемый по умолчанию запрос (AsyncExecutionStrategy) поддерживает, а мутация (AsyncSerialExecutionStrategy) — нет.

Сборщик данных также должен возвращать CompletableFuture с помощью CompletableFuture.supplyAsync(). Обратите внимание, что graphql-java предоставляет удобный сборщик данных под названием AsyncDataFetcher, который может обернуть обычный синхронный сборщик данных в асинхронный:

DataFetcher asyncDataFetcher = AsyncDataFetcher.async(fooDataFetcher);

Спасибо за Ваш ответ. Я спросил об этом в чате для GraphQL Java и получил тот же ответ от официальных разработчиков: спектр.чат/graphql-java/общий/…. Размещение ссылки, чтобы кто-то, кто смотрит на это, мог быть более уверен в ответе.

Aishwar 21.06.2019 14:40

Другие вопросы по теме