Spring Integration:如何知道工作流程何时完成?

时间:2016-01-15 22:28:02

标签: spring logging spring-integration

我正在为多个Spring集成部署添加日志记录/监视功能。我想在工作流的开始创建一个记录器事务,并在工作流结束时关闭日志事务。在记录器事务结束时,我将日志和指标发送到集中式日志记录服务器。在一天结束时,我想查看跨多个Spring集成部署完成工作流的所有消息的日志。

Spring集成部署涉及很多团队,我不能指望每个团队为我添加日志记录代码,所以我想编写将在Spring集成部署中运行的代码。

要启动日志事务,解决方案是在一组入站消息传递通道上使用全局通道拦截器。跨部署构建的所有工作流都使用相同的入站通道集,因此将运行启动日志事务拦截器。 我还将记录器事务详细信息作为消息头

的一部分传递

但我无法找出结束交易的解决方案。工作流可以是同步的也可以是异步的。此外,工作流程中的所有端点都不具有输出通道。

关于如何关闭记录器交易的任何策略/想法?

示例工作流程示例如下图所示:

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您的流以通道适配器(或其他不产生结果的端点)结束,请将最后一个通道设为发布 - 订阅通道;订阅第二个端点到该通道,终止"事务"。

我通常更喜欢在这些端点上添加order属性 - 使常规端点order="1"和流终结符order="2" - 清楚地表明它在主端点之后被调用。

重要的是不要向通道添加任务执行程序,以便在同一个线程上串行调用端点。