【问题标题】:How can I call two methods that return DeferredResult<> in parallel?如何调用两个并行返回 DeferredResult<> 的方法?
【发布时间】:2019-09-12 15:32:24
【问题描述】:

我有一个 Spring Boot 应用程序和一个控制器中有两个端点的遗留代码,它们都返回不同对象的 DeferredResult,现在我需要创建一个新端点,它基本上调用这两个方法并在一些之后组合它们的结果过滤然后返回它。

我想知道有没有一种方法可以同时调用这两个方法,然后将它们的结果合并到一个调用中,就像你在 javascript 中使用 Promise.all 所做的那样?我只是不想做一个回调地狱或等待一个操作完成后再开始另一个操作。当然,新端点也将返回 ReferredResult.

在这方面的任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 你有没有考虑过使用CompletableFuture运行2个线程并返回结果?

标签: java list spring-boot asynchronous deferred


【解决方案1】:

您可以使用CompletableFuture 来处理在执行处理之前获得两个端点结果的要求。

thenCombine() 在这里可以提供很好的帮助。

这里有一个很好的例子的指南here

编辑:

这意味着将 DeferredResult 更改为 CompletableFuture 并使用以下内容:

 CompletableFuture<String> completableFuture =
      CompletableFuture.supplyAsync(this::processRequest);

对于您的两个端点。

您新创建的 REST 端点会将它们与 combineThen() 结合起来

【讨论】:

  • 不知道。会试一试并回复您。
  • 我是否需要将现有端点的返回类型也更改为CompleteableFuture 而不是DeferredResult?这是我无法对现有端点做的事情。
  • 我无法更改它,因为它是一个遗留 API,而且它在整个地方都在内部使用。如果我要更改签名,我将不得不重构微服务中的几乎所有代码。
  • 很高兴你成功了!请投票它可以帮助其他人:)
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多