GraphQL#execute是否在同一线程上运行所有DataFetcher?异步行为是否委托给DataFetcher实现?

时间:2019-06-05 15:04:32

标签: graphql graphql-java

如果我所有的数据提取程序直接返回POJO而不是CompletableFuture,那么整个GraphQL执行是否会在同一线程上发生?

1 个答案:

答案 0 :(得分:0)

是的。根据我从源代码中看到的内容,如果所有数据获取程序仅返回POJO,则整个执行将在同一线程上执行。

要配置数据获取程序以并行运行,必须使用支持异步处理的ExecutionStrategy。查询(AsyncExecutionStrategy)使用的默认值支持,而突变(AsyncSerialExecutionStrategy)不支持。

数据提取程序还必须使用CompletableFuture返回一个CompletableFuture.supplyAsync()。请注意,graphql-java提供了一个方便的数据提取器,称为AsyncDataFetcher,它可以将普通的同步数据提取器包装到异步的数据提取器中:

DataFetcher asyncDataFetcher = AsyncDataFetcher.async(fooDataFetcher);