2

在我的 Spring 应用程序中,我似乎丢失了发送到反应器的消息。我怀疑这是由于在 Spring 容器的生命周期中我开始产生消息的时间。

在我的特定用例中,有一个 Spring Bean 在启动时执行一些初始化。此初始化的一部分涉及生成发送到 Reactor 的消息。

我怀疑 Spring 注册消费者的顺序存在问题,并且初始化代码在消费者注册之前已经运行。如果我在启动后手动运行代码,例如向调用相同代码的控制器发出请求,则消息会将其发送给消费者。

我尝试了各种方法来更改初始化代码运行的生命周期中的时间,例如ApplicationListener<ContextRefreshedEvent>,方法,实现ApplicationListener<ContextStartedEvent>等。这些方法似乎都不起作用。@PostConstructInitializingBean

我的消费者使用@reactor.spring.annotation.Consumer 注释,方法使用@reactor.spring.annotation.Selector 注释。如果相关,我使用Spring Boot 和自动配置的Reactor (@EnableReactor)。

4

1 回答 1

2

在刷新ConsumerBeanAutoConfiguration之前它不会运行ApplicationContext,这意味着它不会在所有内容都被初始化之前寻找Consumerbean(包括,听起来像是发出初始事件的bean)。

如果您将 Reactor 配置放在一个单独的@Configurationbean 上并将@Import其放入主配置中,则应确保在您的主配置开始配置 bean 和发出事件之前完成 Reactor 配置。

于 2015-01-29T16:12:21.087 回答