Ожидание в пристани - PullRequest
       10

Ожидание в пристани

0 голосов
/ 12 декабря 2018

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

Я не хочу sleep в моем потоке, но возвращать его в пул, пока не пройдет какое-то время, и я смогу сделать второй вызов.

Итак, вопрос: как я могу это реализовать?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Решение может быть следующим:

@GetMapping("/fubar")
public DeferredResult<ResponseEntity<?>> fubar() {
    DeferredResult<ResponseEntity<?>> result = new DeferredResult<>();
    scheduledExecutor.schedule(() -> {
        // do some useful stuff here
        result.setResult("Hello World");
    }, 5, TimeUnit.SECONDS);
    return output;
}

Это работает так:

  1. Вы определяете запланированный исполнитель bean и внедряете его в свойконтроллер
  2. В конечной точке, где вы хотите задержку, вы отправляете исполняемый файл, который будет выполнен после определенной задержки и установит результат в DeferredResult экземпляр
  3. Несмотря на возврат DeferredResultэкземпляр сразу же, клиент будет ждать, пока не пройдет задержка, прежде чем получить результат.

NB! Вся работа будет происходить в пуле потоков, который принадлежит запланированному исполнителю, не в общем бассейне.Поэтому его необходимо настроить соответствующим образом.

0 голосов
/ 18 декабря 2018

Посмотрите на javax.servlet.AsyncContext, она существует только для такой ситуации.

...