动态创建集成流程

问题描述 投票:0回答:1

我有一个场景,在应用程序运行时通过

IntegrationFlowContext
创建多个集成流(例如,监听 JMS 队列)并且它工作正常(SpringBoot 3.4.0),但是我们注意到以下情况:

我们当前的实现在带有

@PostConstruct
注释的方法中进行集成流注册。问题是:当启动应用程序并且 JMS 队列中有挂起的消息时,动态创建的流将开始按预期处理它们,但如果在处理过程中出现任何错误(例如,
RuntimeException
),则不会调用默认错误处理因此没有日志并且失败消息丢失 - 我正在 JMS 适配器中设置
errorChannel
(也在
DEBUG
模式下检查)。看起来错误处理流程在应用程序启动期间尚未准备好(生命周期?)。

请注意,如果应用程序已启动并正在运行,并且我们将相同的消息推送到队列中,则默认错误处理流程工作得很好。

我们找到了使用

@EventListener(ApplicationReadyEvent.class)
Spring 注解而不是
@PostConstruct
的解决方案。但这是正确的做法吗?为什么
@PostConstruct
方法在这种情况下不起作用?

spring-integration
1个回答
0
投票

确实,现在开始处理数据还为时过早。 那(自动启动)必须推迟到

@PostConstruct
的后期。我们甚至在文档中提到这一点:
https://docs.spring.io/spring-integration/reference/overview.html#programming-considerations
那就

ApplicationContext

是正确的选择。至少现在是这样。

我们可能会研究 

@EventListener(ApplicationReadyEvent.class)

的改进,以在

IntegrationFlowContext
尚未准备就绪时延迟启动那些动态添加的流。
随时为 Spring Integration 项目提出 GH 问题。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.