使用Spring Reactor丢失消息

时间:2015-01-29 15:55:11

标签: spring reactor project-reactor

我似乎丢失了在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) )。

1 个答案:

答案 0 :(得分:2)

ConsumerBeanAutoConfigurationApplicationContext刷新之前不会运行,这意味着在所有内容都已初始化之前,它不会查找Consumer bean。包括,它听起来像是发出初始事件的豆子。)

如果将Reactor配置放在单独的@Configuration bean和@Import中,并将其放入主配置中,那么在主配置开始配置bean和发出事件之前,应确保Reactor配置完成。