使用 Spring Boot 的多个 REST 调用

Posted

技术标签:

【中文标题】使用 Spring Boot 的多个 REST 调用【英文标题】:Multiple REST Calls using Spring Boot 【发布时间】:2022-01-07 17:44:57 【问题描述】:

我正在尝试使用 Spring Boot 对 API 进行 500 多次 REST 调用 (POST)。目前我正在使用thread pool 使用callable - executor service,因为我也需要来自POST 调用的响应。在 Spring Boot 中是否有更有效的方法来执行此操作? 编辑 - 这是一个 IO 密集型任务

【问题讨论】:

“在 Spring Boot 中有更有效的方法吗?” - 您想在处理器时间、内存消耗或其他方面提高效率吗? 是的,关于处理器时间,内存使用。我想知道 Spring Boot 中是否有内置功能或类似的东西可以用于这种情况。 【参考方案1】:

您可以简单地使用 WebClient,因为它在设计上是非阻塞的。

参见例如:https://newbedev.com/springboot-how-to-use-webclient-instead-of-resttemplate-for-performing-non-blocking-and-asynchronous-calls 但是网络上还有很多其他资源。

但是...如果您使用的是 RestTemplate:

@Service
public class AsyncService 

    private final RestTemplate restTemplate;

    public AsyncService(RestTemplate restTemplate) 
        this.restTemplate = restTemplate;
    

    @Async
    public CompletableFuture<ResponseDto[]> callAsync(RequestDto requestDto) 
        ResponseDto[] responseDtos = restTemplate.postForObject("someUrl", requestDto, ResponseDto[].class);
        
        return CompletableFuture.completedFuture(responseDtos);
    

然后,您可以使用标准 Java Future 机制简单地循环来自任何适合您的上下文的位置的所有请求。

只需确保将@EnableAsync 添加到您的应用程序中

更详细的教程可以在这里找到:https://spring.io/guides/gs/async-method/

【讨论】:

以上是关于使用 Spring Boot 的多个 REST 调用的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot Rest 服务下载包含多个文件的 zip 文件

在具有多个连接的 Spring Boot Rest API 中公开自定义查询

无法使用 Spring Boot Rest 服务将 JSON 转换为 Java 对象

Spring Boot REST JPA JSON 格式

您将如何使用 Spring Boot 处理仅具有可选查询参数的 REST API?

如何保护 Spring Boot Web 应用程序中的 REST API?