[英]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.