簡體   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