Выполняет ли GraphQL # все DataFetchers в одном потоке?Передается ли асинхронное поведение реализации DataFetcher? - PullRequest
2 голосов
/ 05 июня 2019

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

1 Ответ

0 голосов
/ 20 июня 2019

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

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

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

DataFetcher asyncDataFetcher = AsyncDataFetcher.async(fooDataFetcher);
...