Как ждать () в веб-сервисе REST, используя Java и Spring? - PullRequest
0 голосов
/ 27 января 2020

Я работаю над микросервисом 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". Как я могу это сделать? Любые отзывы будут оценены! Спасибо!

Ответы [ 2 ]

2 голосов
/ 27 января 2020

Есть несколько способов сделать это, вы можете попробовать использовать 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();
}

Вы можете использовать это как основу того, чего вы пытаетесь достичь.

1 голос
/ 27 января 2020

Если это очень простая вещь, которую вы пытаетесь достичь, просто используйте то, что @dacuna объяснил в своем ответе.

Но если вы беспокоитесь, внешнему микросервису может потребоваться слишком много времени, чтобы ответить слишком много раз или вы хотите прикрыть спину от возможных перебоев в работе или перейти в сценарий с каскадными сбоями, возможно, вы захотите взглянуть на Hystrix, учитывая простоту интеграции в существующее приложение Spring Boot.

Посмотрите, как интегрировать с ним здесь: https://spring.io/guides/gs/circuit-breaker/.

...