vert.x 的 Quarkus 异步和并行请求

Quarkus asynchronous and paralell requests with vert.x

我有一个 Quarkus 应用程序可以读取文件并发送请求(到另一个 Quarkus 微服务)。目前,我为文件的每一行发送一个请求。但是这个过程需要很长时间,因为我有几千行。

我已经阅读了有关 vert.x 的内容,并且我收到了对 API 的异步请求,多亏了这个 link:

https://quarkus.io/blog/mutiny-concurrent-uni/

但是我的问题是我必须将请求的响应保存到数组中,最后保存文件。所以问题是进程完成并且文件的结果为空(因为请求是异步的并且他们在那一刻正在调用)

这是我发出异步请求的代码:

 this.client = WebClient.create(vertx,
              new WebClientOptions().setSsl(true).setTrustAll(true));
            
 client.postAbs("http://localhost:8082/myApi")
      .sendJson(myDto)
      .subscribe().with(a->this.processRecord(a.bodyAsString());        

我知道我必须等到带有所有记录的 ArrayList 的异步过程完成,然后,当一切完成时保存文件。我读过有关 CompletableFuture 的文章,我认为它可能有用,但我不知道 我必须在哪里等待以及如何等待 .

PS:可能还有另一种方法可以做到这一点。反正我也想知道。

谢谢。

而不是 subscribe,请使用 await().atMost(Duration.ofSeconds(...))await().indefinitely()(不推荐,因为它可能会永远阻塞)。两者都会 return HTTPResponse.

现在,没有太多上下文,很难理解您的方法是如何使用的。通常,我们不使用 await(),因为调用也是异步的,因此期望收到 Uni.