[英]Using Spring4 AsyncRestTemplate in a method which uses an @Async annotation
我正在使用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异步方法
问题
这多余吗? 即使我正在使用AsyncRestTemplate ,使方法异步时缩放也还有其他好处吗?
有什么我认为缺少的最佳实践吗?
实现这种模式?
有什么需要注意的吗?
@Async
直到你添加实际上并没有做任何事情@EnableAsync
注释到您的应用程序。 发生这种情况时,任何调用makeExternalCall
方法的代码都将立即返回,并且spring会寻找TaskExecutor
bean来异步运行整个方法(而不仅仅是asyncRestTemplate
服务是当前代码中唯一的异步部分)。
春季网站的更多信息: http : //docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.