【问题标题】:Is there any better way to concurrently call REST API in spring client implementation?有没有更好的方法在 Spring 客户端实现中同时调用 REST API?
【发布时间】:2019-06-30 07:17:49
【问题描述】:

我正在实现一项服务,该服务在内部调用一些第三方 rest API 来获取数据并对其进行处理。 API调用可以根据不同的用户输入数据进行N次,因此它可以调用API 100次或10000次,平均每个API调用需要1-2秒,这将增加整个过程的总时间。

我想了解是否有任何最好的方法可以顺利处理此类问题? 我计划并发 API 调用大约 100 次或 1000 次(使用@async spring boot 方法运行的线程)但是这个线程数的执行速度将取决于它运行的系统。

您的回复将很有帮助,在此先感谢。

【问题讨论】:

  • 如果瓶颈是第三方api的响应时间,总会遇到时间问题。这不仅是线程的执行,您还必须提供一个线程池,我猜您提到的线程数量可能会在多个服务副本上扩展,这总是会导致问题。你不能分裂你的逻辑吗?也许看看 restTemplate 规范来调用另一个服务。
  • 首先您必须开发一个最小的工作解决方案并收集指标。这将让您了解瓶颈在哪里以及如何优化性能。在我看来,这看起来像是您无法垂直扩展的东西,您需要通过抛出更多节点/集群/服务器实例来水平扩展它来进行计算。

标签: java rest spring-boot


【解决方案1】:

试试reactor项目。如果你想高效使用它需要一些努力,但代码会非常简单,如果你使用 Spring 5/Boot 2,那么你可以利用 NIO Spring Web Client。否则它将类似于您的建议 - 同时运行 X API 调用

【讨论】:

  • 任何想法,一次最多可以同时运行多少个线程以避免其他系统 imapct?
  • 没有好的答案。您必须对其进行测试,因为它取决于服务器主机(机器)、软件、是否有速率限制等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
相关资源
最近更新 更多