繁体   English   中英

在使用@Async批注的方法中使用Spring4 AsyncRestTemplate

[英]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批注并设置ThreadPoolTask​​Executor以及以类似于此处描述的过程的方式向方法中添加@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM