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