Возможно ли это сделать в Webflux? Вызывайте 2 сервиса параллельно и не ждите второго, если с первым выполнено условиеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Возможно ли это сделать в Webflux? Вызывайте 2 сервиса параллельно и не ждите второго, если с первым выполнено условие

Сообщение Anonymous »

Я хочу вызвать 2 службы «a» и «b» и в зависимости от ответа a ждать или нет b.
Примерно так:

Код: Выделить всё

    public Mono test() {

Mono monoA = Mono.fromCallable(() -> {
try {
log.info("A Started");
Thread.sleep(2000);
log.info("A Ended");
return Math.random() > 0.5 ? "A" : "a";
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}).subscribeOn(Schedulers.boundedElastic());

Mono monoB = Mono.fromCallable(() -> {
try {
log.info("B Started");
Thread.sleep(8000);
log.info("B Ended");
return "B";
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}).subscribeOn(Schedulers.boundedElastic());

long startTime = System.currentTimeMillis();

return monoA.flatMap(a -> {
Mono result;
if(a.equals("A")) {
result = Mono.just(a);
} else {
result = monoB;
}
return result;
}).map(response -> {
long totalTime = System.currentTimeMillis() - startTime;
return "Returning '" + response + "' in: " + totalTime + " ms";
});

}
Если monoA = "A" печатается:

A началось

A закончилось

Возврат 'A ' через: 2032 мс
Если monoA = "a" печатает:

A началось

A закончилось

Б запущен

Б Завершено

Возврат 'B' через: 10007 мс
если я использую:

Mono.zip(monoA, monoB)

Лучшим и худшим случаем всегда является 8000 мс
Я хочу, чтобы

если monoA = ответ «A» в 2000 мс

если моноА = ответ «a» через 8000 мс
Возможно или даже правильно ли то, что я хочу сделать?

Подробнее здесь: https://stackoverflow.com/questions/793 ... not-wait-f
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»