Spring integration 有没有办法通过spring集成获得流状态(可能是运行、停止、异常停止)?

Spring integration 有没有办法通过spring集成获得流状态(可能是运行、停止、异常停止)?,spring-integration,spring-integration-dsl,Spring Integration,Spring Integration Dsl,最近,我尝试构建一个rest服务来创建、启动和停止一个集成流(在控制台上读取RSS提要并打印),我能够实现这一点 但我的下一个要求是从已经运行的流中获取状态(可能像running、stopped、stopped with exception),我无法做到这一点,我在“IntegrationFlowRegistration”中看不到任何与此相关的方法 另外,是否有一种方法可以在诸如MySql等RDBMS中存储“IntegrationFlow”?好的,流本身只是它所连接的组件的逻辑容器。尽管我们确实

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

但我的下一个要求是从已经运行的流中获取状态(可能像running、stopped、stopped with exception),我无法做到这一点,我在“IntegrationFlowRegistration”中看不到任何与此相关的方法


另外,是否有一种方法可以在诸如MySql等RDBMS中存储“IntegrationFlow”?

好的,流本身只是它所连接的组件的逻辑容器。尽管我们确实可以在一个
IntegrationFlow
中以某种方式访问所有这些组件,但这并不意味着您的整个解决方案只包含一个
IntegrationFlow
。连接来自不同
IntegrationFlow
s的组件是完全正常的,因为在运行时它们与创建它们的
IntegrationFlow
完全无关。在框架中进行任何配置解析之后,这些运行时组件都是相同的:XML、javadsl、kotlindsl或纯Java&注释配置。您甚至可以手动创建所有bean,但在运行时它仍将是一个EIP解决方案

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

请参见
生命周期
合同。大多数Spring集成都实现了它,因此您可以随时检查它的
isRunning()
。事实上,即使是
StandardIntegrationFlow
也可以实现这一点,但您不应该完全依赖它,因为您的最终解决方案可能由多个流或多个独立组件组成


没有类似于异常停止的
-我们不会因为错误而停止组件。相反,您可以启用度量并检查通道或处理程序
成功
失败
发送计数:

好的,流本身只是它所连接组件的逻辑容器。尽管我们确实可以在一个
IntegrationFlow
中以某种方式访问所有这些组件,但这并不意味着您的整个解决方案只包含一个
IntegrationFlow
。连接来自不同
IntegrationFlow
s的组件是完全正常的,因为在运行时它们与创建它们的
IntegrationFlow
完全无关。在框架中进行任何配置解析之后,这些运行时组件都是相同的:XML、javadsl、kotlindsl或纯Java&注释配置。您甚至可以手动创建所有bean,但在运行时它仍将是一个EIP解决方案

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

请参见
生命周期
合同。大多数Spring集成都实现了它,因此您可以随时检查它的
isRunning()
。事实上,即使是
StandardIntegrationFlow
也可以实现这一点,但您不应该完全依赖它,因为您的最终解决方案可能由多个流或多个独立组件组成


没有类似于异常停止的
-我们不会因为错误而停止组件。相反,您可以启用度量并检查通道或处理程序
success
failure
发送计数:

Artem,我还问了一个问题,即“还有,有没有一种方法可以在RDBMS(如MySql等)中存储“IntegrationFlow”?,我的意思是像序列化对象或其他任何东西一样存储集成流,对此有何建议?IntegrationFlowContext.IntegrationFlowRegistration已从生命周期映射开始和停止。添加isRunning也很好。无论如何,IntegrationFlow在运行时被擦除的事实并不正确。不,没有办法将
IntegrationFlow
序列化到外部存储中,因为它是引用应用程序上下文中许多其他bean的活动对象。我们需要使整个bean树可序列化,但这并不容易。可能有一种方法可以将流保持为XML格式,因此我们可以将其存储为纯文本,然后使用
GenericXmlApplicationContext
基于该XML定义创建子应用程序上下文。您不必担心
IntegrationFlowContext.integrationFlowRegistration
上的生命周期。它只是一个注册阶段指针。您需要处理的真正对象是添加到应用程序上下文中的
IntegrationFlow
bean。它的
StandardIntegrationFlow
实现具有所提到的
isRunning()
契约。只有当您通过
IntegrationFlowRegistration.destroy()
请求时,我们才从应用程序上下文和内存中删除动态流。Artem,我还问了一个问题,即“还有,是否有存储的方法?”IntegrationFlow“在MySql等RDBMS中”,我的意思是像序列化对象或其他任何东西一样存储集成流,对此有什么建议吗?IntegrationFlowContext.IntegrationFlowRegistration已经从生命周期开始映射开始和停止。添加isRunning也很好。无论如何,IntegrationFlow在运行时被擦除的事实并不正确。不,没有办法将
IntegrationFlow
序列化到外部存储中,因为它是引用应用程序上下文中许多其他bean的活动对象。我们需要使整个bean树可序列化,但这并不容易。可能有一种方法可以将流保持为XML格式,这样我们就可以将其存储为