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

通过对其他API进行异步调用,提高SpringBootWeb服务的性能

太叔弘壮
2023-03-14

我正在构建一个SpringBootREST服务,它调用其他RESTAPI来获取数据。我必须调用一个restapi(apia),并根据其输出调用另外两个restapi(apib)

目前,我在一个抓取大小为200的循环中调用“应用编程接口A”(直到它返回空响应)。每次调用后,我然后依次调用API B和API C。我调用API B,获取大小为200(与API A相同)。API C只支持一个输入,所以我循环API A输出,并为每行调用一次。所有这些连续调用都导致我的API需要很长时间才能发回响应。虽然我目前正在调用抓取大小为200的API A,它在2秒钟内返回,但我想通过对抓取大小较小的API A进行异步调用来减少这一时间。

我计划重新安排我的代码,如下所示:

  1. 调用API A 5次(异步调用),获取大小为40
  2. 每次调用完成后-调用API B和API C(同样是异步调用)
  3. 检查第5次调用(对API A)是否返回空响应。如果没有,则对API A再进行5次异步调用,以获取下一组数据(步骤1)。再加上几个约束:API B在获取大小为100的情况下表现良好。所以我不想在每次调用API A返回后调用API B。相反,我希望将API A响应(在列表中)相加,并仅在大小达到100时调用API B。基本上,API A和API B的获取大小应该相互独立

我试图用完全未来(或任何其他方法)找出上面要做的逻辑,但最终感觉非常复杂。因此,我无法最终确定我应该遵循的基本代码结构。

共有2个答案

宋耀
2023-03-14

对API B和C的调用是否依赖于之前的调用?如果没有,您可以使用Mono异步调用它们,并与前面提到的WebClient并行调用。zip()

羊舌涵涤
2023-03-14

我认为可以使用SpringWebFlux库中的SpringWebClient实现您想要的功能(请参阅https://www.baeldung.com/spring-5-webclient 如何使用该客户端)。

WebClient是Springs RestTemplate的跟随者,它可以以无阻塞的方式工作。

 类似资料:
  • 我正在使用的应用程序将按以下顺序使用2个REST web服务: 1) 计数记录-了解特定时间范围内的记录数。 2)获取记录——一旦我们有了记录的数量,我们就需要调用这项服务。但是这项服务有一个门槛来一次性获取10K记录。假设第一个服务在特定的时间间隔内告诉我,它有100K的记录,那么我需要以分页方式调用第二个网络服务10次,考虑到它的阈值是一次10K的。 因此,如果我将进行10次同步调用,我的应用

  • 我有一个.json文件,我正试图将其作为文本字符串导入。 这是确切的文件内容: 我试图用这个导入它: 但是,作为一个数组出现,我不希望它出现-我只希望文本字符串,就像它在文件中一样。 我该如何实现这一点? 所以我的全部代码是: 但现在我看到下面的截图: 我想我想退出的是。为什么要将所有这些附加信息添加到我的文件中?我做错了什么? 当有人花时间向我解释一些事情,而我却不明白时,我总是感到很难过。所以

  • 我正在做一个需要调用其他任务的任务。 我尝试通过添加build.dependson clean来修复原始目标,但这似乎没有影响。 感谢任何帮助。

  • 问题内容: 我正在编写一个将异步检索数据的服务($ http或$ resource)。我可以通过返回一个最初为空但最终将填充的数组来隐藏它是异步的事实: 或者我可以通过返回一个承诺来暴露异步性: (Plunker-如果有人想尝试上述两种实现。) 暴露异步性的一个潜在优势是,我可以通过向方法中添加错误处理程序来处理控制器中的错误。但是,我很可能会在应用程序范围的拦截器中捕获并处理$ http错误。

  • 我尝试了一个简单的java rmi程序,其中客户端对服务器进行远程调用,服务器返回字符串。它与通过LAN连接的两台计算机完美配合通过局域网,但服务器和客户端都连接到互联网?我尝试了以下简单的代码,将Client.java中的localhost更改为服务器的ip地址。没用。我打这么远的电话需要什么? //远程接口- //客户。JAVA //Server.java 我得到了以下例外:java。安全Ac

  • 我有一个Spring Boot后端应用程序,我想列出客户机对我的应用程序进行的所有REST API调用。我正在Tomcat/Nginx中运行我的应用程序。