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
.
我有一个 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
.