使用 Spring 启动的多个 REST 调用
Multiple REST Calls using Spring Boot
我正在尝试使用 Spring Boot 对 API 进行 500 多次 REST 调用(POST)。目前我正在使用 thread pool
使用 callable - executor service
因为我也需要来自 POST 调用的响应。在 Spring Boot 中是否有更有效的方法来执行此操作?
编辑 - 这是一个 IO 密集型任务
您可以简单地使用 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 未来机制简单地循环遍历来自任何适合您上下文的地方的所有请求。
只需确保将@EnableAsync 添加到您的应用程序
可以在这里找到更详细的教程:https://spring.io/guides/gs/async-method/
我正在尝试使用 Spring Boot 对 API 进行 500 多次 REST 调用(POST)。目前我正在使用 thread pool
使用 callable - executor service
因为我也需要来自 POST 调用的响应。在 Spring Boot 中是否有更有效的方法来执行此操作?
编辑 - 这是一个 IO 密集型任务
您可以简单地使用 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 未来机制简单地循环遍历来自任何适合您上下文的地方的所有请求。
只需确保将@EnableAsync 添加到您的应用程序
可以在这里找到更详细的教程:https://spring.io/guides/gs/async-method/