Подписчик Reactivestreams не работает с Spring Reactor Mono. Почему?

У меня есть переменная response.core.publisher.Mono, и я хочу подписаться на org.reactivestreams.Subscriber, хотя, похоже, она не работает. Я не могу понять Почему метод onNext никогда не вызывается? Я вижу метод onSubscribe, который называется нормально. Могу ошибиться, но поскольку Mono реализует Publisher, подписчик должен работать. Верно?

@Test
    public void subscriberTest() {
        Mono<String> m = Mono.just("Hello!");
        Subscriber<String> s = new Subscriber<String>() {
            @Override
            public void onSubscribe(Subscription s) {
                System.out.println("Subscription "+s);
            }
            @Override
            public void onNext(String t) {
                System.out.println("onNext "+t);
            }
            @Override
            public void onError(Throwable t) {
                System.out.println("Throwable "+t);
            }
            @Override
            public void onComplete() {
                System.out.println("onComplete");
            }
        };
        m.subscribe(s);

        Mono<String> m1 = Mono.just("Bye!");
        m1.subscribe(System.out::println);
    }

Хотя подписка на переменную m1 со ссылкой на метод работает нормально. Вот вывод консоли:

Subscription reactor.core.publisher.StrictSubscriber@4b168fa9
Bye!

Здесь я ожидаю увидеть Hello! фраза тоже.

Хорошо, спасибо! Я приму ваш ответ, если вы его создадите.

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

Ответы 1

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

https://www.reactive-streams.org/reactive-streams-1.0.0-javadoc/org/reactivestreams/Subscriber.html#onSubscribe-org.reactivestreams.Subscription- Здесь указано, что No data will start flowing until Subscription.request(long) is invoked.

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