spring boot 并行传出请求的最佳实践是啥?

Posted

技术标签:

【中文标题】spring boot 并行传出请求的最佳实践是啥?【英文标题】:What's the best practice for spring boot parallel outgoing requests?spring boot 并行传出请求的最佳实践是什么? 【发布时间】:2018-11-01 21:26:39 【问题描述】:

我正在构建一个 Java Spring Boot(微)服务,它基本上有一个 REST 端点来检索某些资源的数据。为此,对于每个传入的请求,我需要从大约 3-5 个外部资源中检索信息(数据的缓存和预检索不是一种选择,因为缓存在统计上无济于事,而且我不能存储数据以任何方式在我的服务器上)。

所以基本上每个传入的请求我需要生成 3-5 个外部服务调用,当然我希望让这些调用并行/并发。这是一个非常轻量级的服务,因为它主要等待 I/O 响应。

这样做的最佳做法是什么?

如果我需要使用某种线程池,这意味着如果我需要支持 200 个并行请求,那么我需要 600-1000 个线程来处理传出请求,这变成了一个非常繁重的服务,主要是在等待 I/ O。

(相比之下,使用 Node.js 这很容易,因为我每个人只使用一个Promise.all(...),并且我获得了很好的并发性,但是我希望了解如何使用 Java Sprint-Boot 来实现相同的目标)

【问题讨论】:

我认为您的问题不适合 SO - 它基于意见,过于广泛,最后,它主要是要求图书馆推荐 - 所有 3 个都不适合。但您可能想阅读这篇博文:High-Concurrency HTTP Clients on the JVM 【参考方案1】:

您可以使用 Spring 5 中添加的新响应式功能。 您可以在最新的 Spring Boot 版本中使用它。

例如看看这个https://spring.io/guides/gs/reactive-rest-service/

【讨论】:

以上是关于spring boot 并行传出请求的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Thymeleaf 在 Spring Boot 中记录 Activity 的最佳方法是啥?

打包结构化 Spring 项目的最佳实践是啥?

当Parallel遇上了DI - Spring并行数据聚合最佳实践

Spring Boot Admin最佳实践

Spring Boot项目传参校验最佳实践

Spring Boot 更新用户数据的最佳方法是啥?