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

Quarkus与Vert.x的异步和并行请求

杨良平
2023-03-14

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

我读过关于Vert.x的文章,我得到了一个对API的异步请求,这要感谢这个链接:

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:也许有其他方法可以做到这一点。反正我也想知道。

多谢了。

共有1个答案

微生俊捷
2023-03-14

使用Await().atmost(duration.ofseconds(...))Await().indefinitely()代替subscribe。两者都将返回httpresponse

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

 类似资料:
  • 问题内容: 我想根据多个ajax / json请求的结果来更新页面。使用jQuery,我可以“链接”回调,例如以下非常简单的示例: 但是,这导致请求是串行发出的。我宁愿以一种并行方式发出请求,并在完成所有操作后执行页面更新的方法。有什么办法吗? 问题答案: 尝试以下解决方案,该解决方案可以支持任意数量的并行查询:

  • 问题内容: 我正在使用Node.js运行服务器,并且需要从正在运行的另一台服务器()请求数据。我需要向数据服务器发出许多请求(〜200)并收集数据(响应大小从〜20Kb到〜20Mb不等)。每个请求都是独立的,我想将响应保存为以下形式的一个巨大数组: 请注意,项目的顺序并不重要,理想情况下,它们应该以数据可用的顺序填充数组。 现在,当运行该程序时,它将显示: 现在,由于文件的大小如此可变,我期望它可

  • 问题内容: 当我使用of方法时,和之间有什么区别? 问题答案: Mozilla开发人员:同步和异步请求 支持同步和异步通信。但是,一般而言,出于性能方面的考虑,异步请求应比同步请求优先。 简而言之,同步请求会阻止代码执行,并可能泄漏内存和事件。这可能会导致严重的问题。使用同步请求的唯一可行理由是更轻松地促进其中的下载。

  • 本文向大家介绍详解XMLHttpRequest(一)同步请求和异步请求,包括了详解XMLHttpRequest(一)同步请求和异步请求的使用技巧和注意事项,需要的朋友参考一下 XMLHttpRequest 让发送一个HTTP请求变得非常容易。你只需要简单的创建一个请求对象实例,打开一个URL,然后发送这个请求。当传输完毕后,结果的HTTP状态以及返回的响应内容也可以从请求对象中获取。  通过XML

  • 我有endpoint,它可以返回同步和异步结果 如何刻意返回某物,即同步?

  • 我希望我的请求触发一些长时间运行的操作,这些操作应该在后台执行。我编写了以下实现,应该在后台处理我的操作,但实际上我的请求是同步执行的: 在日志中,我看到以下内容: 我看到我的在另一个线程中执行,但出于某种原因,我的原始请求等待sleep完成 更新1: