Задать вопрос
@Wan-Derer
Зобанели на Хабре, волки́ ;((

Как в Reactor запускать параллельные запросы?

У меня есть два метода, делающие запросы, требующие времени. Оба возвращают Mono<String>. Есть основной метод, которому надо дождаться результатов выполнения обоих методов. Как запросить их параллельно, чтобы второй не ждал пока отработает первый?

public class Test {
  
  static Mono<String> getFromHttp() {
    // не спеша запрашивает через HTTP
  }

  static Mono<String> getFromDb() {
    // не спеша запрашивает DB
  }

  public static void main(String[] args) throws InterruptedException {

    //  Что тут надо написать чтобы:

    //  запросить getFromHttp()
    //  не дожидаясь ответа, запросить getFromDb()

    //  дождаться ответа обоих
    //  продолжить работу

  }

}
  • Вопрос задан
  • 63 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Wan-Derer Автор вопроса
Зобанели на Хабре, волки́ ;((
Нашёл аналогичный вопрос :)

Кому интересно, решение:

public class Test {

  static Mono<String> getFromHttp() {
    return Mono.just("from HTTP").delayElement(Duration.ofSeconds(2));
  }

  static Mono<String> getFromDb() {
    return Mono.just("from DB").delayElement(Duration.ofSeconds(1));
  }

  public static void main(String[] args) {

    String fromHttp = "---";
    String fromDb = "===";

    long start = System.currentTimeMillis();

    Mono<String> httpReq = getFromHttp();
    Mono<String> dbReq = getFromDb();

    Tuple2<String, String> values = Mono.zip(httpReq, dbReq).block();
    fromHttp = values.getT1();
    fromDb = values.getT2();

    System.out.println(System.currentTimeMillis() - start);
    System.out.println(fromHttp);
    System.out.println(fromDb);
  }
  
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019 Куратор тега Java
Bigdata Engineer
В том виде как ты написал - это классическое задание на мультипточность.
Убери Mono. Используй Thread, Runnable, start, join

Реактор здесь не нужен или его использование не мотивировано.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы