Задать вопрос
@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()

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

  }

}
  • Вопрос задан
  • 65 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Java-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Java-разработчик
    14 месяцев
    Далее
  • Хекслет
    Java-разработчик
    10 месяцев
    Далее
  • Stepik
    Буткемп "Java: написание веб-сервисов для начинающих"
    1 месяц
    Далее
  • Merion Academy
    Java-разработчик с нуля
    4 месяца
    Далее
  • Skypro
    Java-разработчик с нуля
    9 месяцев
    Далее
  • Нетология
    Java-разработчик с нуля
    12 месяцев
    Далее
  • ProductStar
    Java-разработчик
    10 месяцев
    Далее
Решения вопроса 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

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

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

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