Здравствуйте у меня следующая проблема. Как видите, я создал эти 3 Unis
Uni<List<JsonObjectCar>> carDoorsUni = getDoors(variable1,
variable2, variable3);
Uni<List<JsonObjectCar>> carWheelsUni = getWheels(variable1,
variable2, variable3);
Uni<List<JsonObjectCar>> carWindowsUni = getWindows(variable1,
variable2, variable3);
Эти три Uni делают запрос в 3 разных микросервиса, и я хочу объединить ответ. Я использовал следующий код, чтобы объединить его
Uni.combine()
.all()
.unis(carDoorsUni, carWheelsUni, carWindowsUni)
.combinedWith((carDoors, carWheels, carWindows) -> {
Optional.of(carDoors)
.ifPresent(val -> car.setDoors(val.getDoors()));
Optional.of(carWheels)
.ifPresent(val -> car.setWheels(val.getWheels()));
Optional.of(carWindows)
.ifPresent(val -> car.setWindows(val.getWindows()));
return car;
});
Intellij показывает предупреждение о том, что комбинированный код будет проигнорирован и фактически никогда не запускается. Я также пытался использовать .await().indefinitely(), но получаю следующую ошибку The current thread cannot be blocked: vert.x-eventloop-thread-11.




Вам необходимо подписаться, иначе никакая обработка никогда не будет выполнена (см.
.await().indefinitely() — подписка на блокировку, при которой вы блокируете текущую ветку. Здесь вы блокируете поток цикла обработки событий Vert.x, поэтому через некоторое время получаете предупреждение.
Это также может помочь: https://quarkus.io/guides/quarkus-reactive-architecture
Последний вопрос. Я фактически сделал все, что хотел, внутри объединения с методом, так в чем причина добавления .with() после подписки? Как я вижу, если я добавлю один .subscribe, все равно будет то же самое, и после того, как я добавлю .subscribe().with(e -> System.out.println(e)); оно работает. Какова наилучшая практика, которую вам нужно сделать внутри этого with()? Также большое спасибо за вашу поддержку, мне наконец удалось решить эту проблему, большое спасибо.