有什么方法可以通过 spring 集成获取流状态(可能像 运行、已停止、异常停止)?

Any way to get flow status (maybe like, running, stopped, stopped with exception) with spring integration?

最近,我试图构建一个休息服务来创建、启动和停止集成流(读取 RSS 提要并在控制台上打印),我能够实现它。

但我的下一个要求是从已经 运行 的流程中获取状态(可能像 运行,已停止,异常停止),但我无法做到这一点,我看不到与 "IntegrationFlowRegistration".

中相关的任何方法

此外,有没有办法像 MySql 等那样在 RDBMS 中存储 "IntegrationFlow"?

好吧,流程本身只是它连接的组件的逻辑容器。即使我们确实可以通过某种方式访问​​一个 IntegrationFlow 中的所有这些组件,但这并不意味着您的整个解决方案只包含一个 IntegrationFlow。连接来自不同 IntegrationFlow 的组件是完全正常的,因为在运行时它们与创建它们的 IntegrationFlow 完全无关。在框架中进行任何配置解析后,这些运行时组件是相同的:XML、Java DSL、Kotlin DSL 或只是普通的 Java & Annotation 配置。您甚至可以手动创建所有 bean,并且在运行时仍然是一个 EIP 解决方案。

我想说的是,试图为整个心流状态寻找解决方案是错误的。或者你应该咨询一些单独的组件(例如提到的 RSS 组件),或者你应该有一些单独的组件来跟踪这种自定义状态。

参见Lifecycle合同。大多数 Spring Integration 都实现了它,因此您可以随时查看它的 isRunning()。事实上,即使 StandardIntegrationFlow 实现了这个,但您不应该完全依赖它,因为您的最终解决方案可能包含多个流程或许多独立组件。

没有任何东西像 stopped with exception - 我们不会因为错误而停止组件。相反,您可以启用指标并检查通道或处理程序 successfailure 发送计数:https://docs.spring.io/spring-integration/docs/5.3.0.RELEASE/reference/html/system-management.html#metrics-management