【发布时间】:2019-10-21 02:57:52
【问题描述】:
如果我所有的 Data Fetchers 都直接返回 POJO 而不是 CompletableFuture,那么整个 GraphQL 执行是否会发生在同一个线程上?
【问题讨论】:
标签: graphql graphql-java
如果我所有的 Data Fetchers 都直接返回 POJO 而不是 CompletableFuture,那么整个 GraphQL 执行是否会发生在同一个线程上?
【问题讨论】:
标签: graphql graphql-java
是的。根据我从源代码中看到的,如果所有数据获取器都只返回 POJO,则整个执行将在同一个线程上执行。
要将数据提取器配置为并行运行,您必须使用支持异步处理的ExecutionStrategy。查询使用的默认值 (AsyncExecutionStrategy) 支持,而突变 (AsyncSerialExecutionStrategy) 不支持。
数据提取器还必须使用CompletableFuture.supplyAsync() 返回一个CompletableFuture。请注意graphql-java 提供了一个名为AsyncDataFetcher 的方便的数据获取器,它可以将普通的同步数据获取器包装到异步数据获取器:
DataFetcher asyncDataFetcher = AsyncDataFetcher.async(fooDataFetcher);
【讨论】: