@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()

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

  }

}
  • Вопрос задан
  • 57 просмотров
Решения вопроса 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

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

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
05 мая 2024, в 23:43
8000 руб./за проект
05 мая 2024, в 23:39
3000 руб./за проект
05 мая 2024, в 23:36
3000 руб./за проект