我正在使用Spring4 AsyncRestTemplate 来调用外部REST API服务。
以下方法来自Spring @Service 类。 AsyncRestTemplate 是从Spring @Bean 自动装配的。
在该方法中,我在REST API调用的 ListenableFuture 响应中注册了回调。
除了单元测试之外,我不使用返回的 ListenableFuture 。回调将根据请求成功或失败处理我想要采取的实际操作。
ExternalServiceImpl.class
public ListenableFuture<ResponseEntity<ResponseBody>> makeExternalCall(RequestBody requestBody) {
HttpEntity<RequestBody> request = new HttpEntity<>(RequestBody, getDefaultHeaders());
ListenableFuture<ResponseEntity<ResponseBody>> responseEntity = asyncRestTemplate.exchange(serviceUri.toUriString(), HttpMethod.POST, request, ResponseBody.class);
responseEntity.addCallback(
(onSuccess) -> System.out.println("Success"),
(onFailure) -> onFailure.printStackTrace()
);
return responseEntity;
}
我计划使用@EnableAsync注释并设置ThreadPoolTaskExecutor以及以类似于此处描述的过程的方式向方法添加@async注释:Spring Asynchronous Methods
问题
这是多余的吗?缩放时是否还有其他好处 即使我正在使用,也使该方法异步 AsyncRestTemplate ?
是否有任何我认为最佳的做法 实施这种模式?
有什么需要注意的吗?
答案 0 :(得分:0)
@Async
注释之前, @EnableAsync
实际上并没有做任何事情。当发生这种情况时,任何调用makeExternalCall
方法的代码都会立即返回,spring会查找TaskExecutor
bean以异步方式运行整个方法(而不仅仅是asyncRestTemplate
服务是唯一的当前代码的异步部分。)
春季网站上的更多信息:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html