当前位置: 首页 > 知识库问答 >
问题:

Spring WebFlux:并行调用的竞争,当其中一个响应有数据时取消/返回

颜志学
2023-03-14

我有三个对三个不同endpoint的并行调用,其中只有一个将返回我要处理的数据(响应将只包含enpoint-1、enpoint-2或Enpoint-3的数据)。如果其中一个调用返回数据,我希望立即返回该数据,并忘记其他调用...我如何使用Spring WebFlux实现这一点?

Mono<MyResponse> result = client.post()
  .uri('uri')
  .body(Mono.just(request), MyRequest.class)
  .retrieve()
  .bodyToMono(MyResponse.class);
 List<Mono<MyResponse>> calls
Flux.merge(calls).toStream().forEach(response -> myResponseList.addAll(response));

谢了!

共有1个答案

严兴言
2023-03-14

你只能取流量的第一个元素

 Flux.merge(calls).take(1)

你只得到第一个元素的新通量,它在产生它后就完成了。

 类似资料:
  • 问题内容: 在我的科目表中,我按学期和月份列出了所有学生的课程,每个月的分数 这就是我尝试过的 我从查询中获得的当前输出是每个查询的多个响应,因为我可以将其更改为,但不会获取其他数据 我的问题是我如何将它们合并为一个响应,并在预期的输出中返回以下数据(我在每个字段中添加了一些说明以对其进行解释) 预期产量 问题答案: 问题是,您想获取主题,而不是学生。因此,我反转了FROM和LEFT JOIN。因

  • 我使用 Visual Studio AWS 扩展是为了使用 Docker 映像模板创建简单的 aws lambda 函数。Docker 映像已生成、标记并最终推送到容器注册表。从那里,我使用容器映像创建一个新的 lambda 函数。但是当我测试它时(在本地使用dotnet lambda调用函数或使用AWS控制台上的测试工具),我得到了 亚马逊Lambda工具。NET核心应用程序(5.3.0)项目主

  • 我不知道在这里问这个问题是否正确。如果不合适,请告诉我。 我使用charles监控我的Android移动设备的http流量。它确实有效,现在我想在回复返回时做点什么。例如,我访问www.google。com和响应返回,然后我想保存响应文本或执行其他操作。

  • 我正试图用CakePHP3制作一个api。有了这个api,我将向系统发送一些批量电子邮件的信息。在将api请求存储到databse中之后,我希望返回已收到请求的确认并开始批处理。完成处理后,我想发送一个回调响应来返回处理状态。在我目前的编码系统中,我必须等待完成这个过程。我怎么能并行地做呢? [我不确定实际问题的标题应该是什么,请随意编辑。:)]

  • 问题内容: 我尝试用并行goroutines编写一个复杂的程序。这是我的第一个带有通道的程序;)每个goroutine返回一个数组,不幸的是,结果是“随机”。如果我运行该程序10次,则有10种不同的结果:( 这是我程序的过度简化,结果很好(也许是因为它太简单了),但是当我使用-race参数运行它时,有4个数据竞争。 我试图有一个close()函数,但是没有用。 您能帮我发现错误吗?提前非常感谢您!

  • 问题内容: 我有一个6列5行的表。我想选择所有行并使用(ASP.NET C#)仔细阅读它们。我目前可以使用访问单个列并将其存储在字符串变量中。 我想逐行阅读各列。 感谢您的帮助。 问题答案: 如果要将行和列存储到某种类型的集合中,可以尝试使用“列表和字典”,这将使您可以根据需要添加任意多的行。