Запрос Quarkus Mutiny игнорируется при использовании Unis.combinedWith

Здравствуйте у меня следующая проблема. Как видите, я создал эти 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.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам необходимо подписаться, иначе никакая обработка никогда не будет выполнена (см.

.await().indefinitely() — подписка на блокировку, при которой вы блокируете текущую ветку. Здесь вы блокируете поток цикла обработки событий Vert.x, поэтому через некоторое время получаете предупреждение.

Это также может помочь: https://quarkus.io/guides/quarkus-reactive-architecture

Последний вопрос. Я фактически сделал все, что хотел, внутри объединения с методом, так в чем причина добавления .with() после подписки? Как я вижу, если я добавлю один .subscribe, все равно будет то же самое, и после того, как я добавлю .subscribe().with(e -> System.out.println(e)); оно работает. Какова наилучшая практика, которую вам нужно сделать внутри этого with()? Также большое спасибо за вашу поддержку, мне наконец удалось решить эту проблему, большое спасибо.

Theodosis 04.11.2022 15:34

Другие вопросы по теме