簡體   English   中英

如何使用 Java 和 Spring 在 REST Web 服務中等待()?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM