[英]How to wait() in a REST web service using Java and Spring?
我正在開發一個 Spring Boot 微服務,這個微服務與另一個微服務通信以使用 REST 接收一些數據。 類似的東西:
public class PdfClient {
private ErternMicr externMicr;
@Autowired
public PdfClient(ErternMicr externMicr) {
this.externMicr = externMicr;
}
public String getData(String pdfId) {
String pdf = "0";
pdf = externMicr.getPdfData(pdfId);
return pdf;
}
}
所以當這個externMicr.getPdfData(pdfId)
被調用時,我使用 REST 從另一個微服務獲取一些數據。 我需要做的是我不想等待很長時間來接收數據,我想調用這個方法 3 次,每次 10 秒,如果這段時間內沒有數據進來,返回將是“0”。 我怎樣才能做到這一點? 任何反饋將不勝感激! 謝謝!
有幾種方法可以做到這一點,您可以嘗試使用並發包中的 Executor:
final ExecutorService restService = Executors.newSingleThreadExecutor();
try {
final Future<String> pdfFuture = restService.submit(() -> {
// PUT YOUR PDF CODE HERE
return pdf;
});
String pdfFile = pdfFuture.get(10, TimeUnit.SECONDS);
} catch (final TimeoutException e) {
// TIMEOUT!
return "0";
} finally {
restService.shutdown();
}
您可以將其用作您要實現的目標的基礎。
如果這是您想要實現的非常簡單的事情,請使用@dacuna 在他的回復中解釋的內容。
但是,如果您擔心外部微服務可能需要太長時間來響應太多次,或者您想為可能的中斷提供支持,或者陷入級聯故障場景,那么您可能想看看 Hystrix,因為它是多么容易是集成到現有的 Spring Boot 應用程序中。
在此處查看如何與它集成: https : //spring.io/guides/gs/circuit-breaker/ 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.