【问题标题】:Does the GraphQL#execute run all DataFetchers on the same thread? Is the asynchronous behaviour delegated to the DataFetcher implementation?GraphQL#execute 是否在同一线程上运行所有 DataFetchers?异步行为是否委托给 DataFetcher 实现?
【发布时间】:2019-10-21 02:57:52
【问题描述】:

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

【问题讨论】:

    标签: graphql graphql-java


    【解决方案1】:

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

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

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

    DataFetcher asyncDataFetcher = AsyncDataFetcher.async(fooDataFetcher);
    

    【讨论】:

    • 感谢您的回答。我在 GraphQL Java 的频谱聊天中问过这个问题,并且从官方开发人员那里得到了相同的答案:spectrum.chat/graphql-java/general/…。发布链接,以便查看此链接的人对答案更有信心。
    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2010-11-29
    • 2019-05-10
    • 2016-02-10
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多