2017-06-27 54 views
-1

我有一個休息服務,它執行大量文件下載。我不希望用戶等到文件下載完成,而是讓用戶撥打其餘的電話,然後向用戶回覆說「文件在/ tmp /進行中下載」的消息。REST方法調用@async

我有一個使用@async方法執行文件下載的服務。一旦文件下載完成,我想調用其他代碼(在kafka上發佈成功消息)。我無法鉤住這部分代碼。我在哪裏放置@async方法完成執行後運行的代碼?

回答

0

假設這是春季? 您的方法可以返回您的返回類型的CompletableFuture包裝。看看描述這一點的Spring docs

然後,您可以使用then前綴方法CompletableFuture在結果可用時附加回調函數。有一些很好的例子here

在你的情況可能是這個樣子:

@Async 
public CompletableFuture<FileDownloadResult> myDownloadFileAsync(...) { 
    // download the file and create the result.. 
    return CompletableFuture.completedFuture(result); 
} 

... 

CompletableFuture<FileDownloadResult> future = myDownloadFileAsync(...); 
  
future.thenAccept(res -> { 
    // do things with the file download result 
    publishToKafka(...); 
}); 

future.get(); 
+0

謝謝。做更多的谷歌搜索我實際上擊中了你提到的兩個教程:) – khan379

相關問題