我似乎丢失了在Spring应用程序中发送到反应器的消息。我怀疑这是由于我开始生成消息的Spring容器生命周期中的时间。
在我的特定用例中,有一个Spring Bean在启动时执行一些初始化。此初始化的一部分涉及生成发送到Reactor的消息。
我怀疑Spring注册消费者的订单存在问题,并且初始化代码已在消费者注册之前运行。如果我在启动后手动运行代码,例如向调用相同代码的控制器发出请求,然后消息将消息发送给消费者。
我尝试了各种方法来改变初始化代码运行的生命周期中的时间,例如: ApplicationListener<ContextRefreshedEvent>
,ApplicationListener<ContextStartedEvent>
,@PostConstruct
方法,实施InitializingBean
等。这些方法似乎都不起作用。
我的消费者使用@ reactor.spring.annotation.Consumer和@ reactor.spring.annotation.Selector.Just的方法进行注释,以防它相关,我使用的是Spring Boot和自动配置的Reactor(@EnableReactor) )。
答案 0 :(得分:2)
ConsumerBeanAutoConfiguration
在ApplicationContext
刷新之前不会运行,这意味着在所有内容都已初始化之前,它不会查找Consumer
bean。包括,它听起来像是发出初始事件的豆子。)
如果将Reactor配置放在单独的@Configuration
bean和@Import
中,并将其放入主配置中,那么在主配置开始配置bean和发出事件之前,应确保Reactor配置完成。