Я, кажется, теряю сообщения, отправленные в реактор в приложении Spring. Я подозреваю, что это связано с тем, что на жизненном цикле контейнера Spring я начал создавать сообщения.Потерянные сообщения с пружинным реактором
В моем конкретном случае использования есть Spring Bean, который выполняет некоторую инициализацию при запуске. Часть этой инициализации включает в себя создание сообщения, которое отправляется в реактор.
Я подозреваю, что существует проблема с заказом, что Spring регистрирует потребителей и что код инициализации запускался до того, как были зарегистрированы потребители. Если я запускаю код вручную после запуска, например. сделайте запрос контроллеру, который вызывает тот же код, а затем сообщения отправят его потребителю.
Я пробовал различные способы изменения времени на жизненном цикле, выполняемого кодом инициализации, например. ApplicationListener<ContextRefreshedEvent>
, ApplicationListener<ContextStartedEvent>
, @PostConstruct
способ, осуществление InitializingBean
и так далее. Ни один из этих подходов не работает.
Мои потребители аннотируются с помощью @ reactor.spring.annotation.Конкурс и методы с @ reactor.spring.annotation.Selector.Просто в случае, если это имеет значение, я использую Spring Boot и автоконфигурированный реактор (@ EnableReactor).
Спасибо за ответ! К сожалению, это тоже не проблема. Просто чтобы подтвердить мое понимание; Я больше не полагаюсь на реактор, предоставленный AutoConfig. Теперь я предоставляю свои собственные: '@Bean public Reactor rootReactor (среда окружения) {return Environment.getRootReactor(); } 'в классе' @ Configuration'. Затем я гарантирую, что мой основной класс приложения аннотируется с помощью: '@EnableReactor @SpringBootApplication @Import (ReactorConfiguration.class)' Еще один вопрос; где именно идут эти сообщения, если они не доставляются потребителям один раз на RingBuffer? –