【问题标题】:How to wait() in a REST web service using Java and Spring?如何在使用 Java 和 Spring 的 REST Web 服务中等待()?
【发布时间】:2020-01-27 18:16:46
【问题描述】:

我正在开发一个 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”。我怎样才能做到这一点?任何反馈将不胜感激!谢谢!

【问题讨论】:

  • 请检查 CompleteableFuture 是否有帮助。

标签: java spring rest spring-boot wait


【解决方案1】:

有几种方法可以做到这一点,您可以尝试使用并发包中的 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();
}

您可以以此为基础来实现您的目标。

【讨论】:

  • 感谢您的回复!所以我需要放 externMicr.getPdfData(pdfId) 而不是 // PUT YOUR PDF CODE HERE,但是如果每次调用都没有在 10 秒内收到数据,我怎么能重复这个方法调用 3 次。
【解决方案2】:

如果您想要实现的目标非常简单,请使用@dacuna 在他的回复中解释的内容。

但是,如果您担心外部微服务可能需要很长时间才能响应太多次,或者您想避免可能的中断,或者陷入级联故障场景,您可能需要查看 Hystrix,因为集成到现有的 Spring Boot 应用程序是多么容易。

在此处查看如何与其集成:https://spring.io/guides/gs/circuit-breaker/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 2016-04-29
    • 2016-10-29
    • 1970-01-01
    相关资源
    最近更新 更多