首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过对其他APIs进行异步调用来提高spring引导web服务的性能

通过对其他APIs进行异步调用来提高spring引导web服务的性能
EN

Stack Overflow用户
提问于 2021-07-23 05:21:50
回答 2查看 1.3K关注 0票数 0

我正在构建一个服务,它调用其他REST来获取数据。我必须调用REST (API A),并根据它的输出调用另外两个REST (API B& C)。"API“支持分页,因此我可以将开始计数和获取大小传递给它,以获得一组特定的数据。

目前,我在一个大小为200的循环中调用"API A“(直到返回空响应)。每次调用之后,我将依次调用API B和API C。我调用的API B的获取大小为200 (与API A相同)。API C只支持一个输入,所以我循环使用API输出,并对每一行调用一次。所有这些连续调用都导致我的API需要很长时间才能返回响应。虽然我目前调用的API A的获取大小为200,并在2秒内返回,但我希望通过异步调用API A来减少这一次,使其具有更小的获取大小。

我计划将我的代码重新排列如下:

  1. 调用API 5次(异步调用),获取大小为40。
  2. 每次调用完成后-调用API b和API c(同样是异步调用)
  3. 检查第五次调用(对API A)是否返回空响应。如果没有,则再对API A进行5次异步调用,以获得下一组数据(步骤1),很少有更多的约束: API在获取大小为100的情况下表现良好。因此,我不想在每次调用API A之后调用API B。相反,我想把API响应加起来(在一个列表中),只有当大小达到100时才调用API。基本上,API A和API B的获取大小应该是相互独立的。

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

EN

回答 2

Stack Overflow用户

发布于 2021-07-23 05:45:51

我认为您想要的可以通过使用来自WebClient库的Spring弹簧网通量来实现(参见https://www.baeldung.com/spring-5-webclient如何使用该客户端)。

WebClient是Spring的追随者,RestTemplate可以以非阻塞的方式工作。

票数 0
EN

Stack Overflow用户

发布于 2021-07-23 09:03:05

对API B和C的调用是否取决于先前的调用?如果不是,您可以使用WebClient异步和并行地使用Mono.zip()调用它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68494395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档