Asynchronous Quarkus异步和并行请求与vert.x

Asynchronous Quarkus异步和并行请求与vert.x,asynchronous,vert.x,quarkus,Asynchronous,Vert.x,Quarkus,我有一个Quarkus应用程序,它读取文件并发送请求(到另一个Quarkus微服务)。目前,我为文件的每一行发送一个请求。但是这个过程需要很长时间,因为我有上千行 我已经阅读了关于vert.x的内容,由于以下链接,我收到了对API的异步请求: 但是我的问题是,我必须将请求的响应保存到数组中,最后保存文件。因此,问题是流程结束,文件结果为空(因为请求是异步的,并且它们正在调用) 这是我发出异步请求的代码: this.client = WebClient.create(vertx,

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

我已经阅读了关于vert.x的内容,由于以下链接,我收到了对API的异步请求:

但是我的问题是,我必须将请求的响应保存到数组中,最后保存文件。因此,问题是流程结束,文件结果为空(因为请求是异步的,并且它们正在调用)

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

 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:可能还有其他方法可以做到这一点。无论如何,我想知道


谢谢。

请使用
await().atMost(持续时间秒(…)
)或
await().infinally()
(不建议使用,因为它可能会永久阻塞)。两者都将返回
HTTPResponse


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

Hi@Clement,非常感谢您的回答(以及您的文章!)。基本上,如果我必须处理500K请求,我不想一个接一个地处理,因为这个过程可能需要太长时间。所以我认为最好的方法是使用并行或异步请求,对吗?此外,我不需要等待任何秒,直到收到响应。我只想并行处理所有请求,一旦完成,就做“事情”。谢谢。所以,您需要的是“合并”:``Uni Uni=Uni.combine().all().unis(uniA,uniB,…).combined(//将500K请求排队或使用响应列表->{Map Map Map Map=new LinkedHashMap();Map.put(“a”,(Response)list of responses.get(0));Map.put(“B”,(Response)listOfResponses.get(1));return map;});“``请看:谢谢。但是我可以用“Uni”对象做什么?我必须订阅什么吗?用这种方式它不打印任何内容:uniCombine.subscribe()。with(a->System.out.println(a.get(“a”));这是代码:是的,要执行请求,您需要订阅,并将Uni返回给Quarkus(以便Quarkus订阅)