- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为多个 spring 集成部署添加日志记录/监控功能。我想在工作流开始时创建一个记录器事务,并在工作流结束时关闭日志事务。在记录器事务结束时,我会将日志和指标发送到集中式日志服务器。在一天结束时,我想查看跨多个 Spring 集成部署的工作流中的所有消息的日志。
spring 集成部署跨越很多团队,我不能指望每个团队都为我添加日志记录代码,所以我想编写将在 spring 集成部署中运行的代码。
要启动日志事务,解决方案是在一组入站消息 channel 上使用全局 channel 拦截器。跨部署构建的所有工作流都使用同一组入站 channel ,因此启动日志事务拦截器将运行。我还将记录器事务详细信息作为消息 header 的一部分传递
但我无法找到结束交易的解决方案。工作流可以是同步的也可以是异步的。此外,并非工作流中的所有端点都有输出 channel 。
关于如何关闭记录器事务的任何策略/想法?
下图显示了示例工作流程的示例:
最佳答案
当您有一个以 channel 适配器(或其他不产生任何结果的端点)结束的流时,将最后一个 channel 设为发布-订阅 channel ;为终止“交易”的 channel 订阅第二个端点。
我通常更喜欢在此类端点上添加 order
属性 - 使常规端点 order="1"
和流终止符 order="2"
- 清楚地表明它是在主要端点之后调用的。
重要的是没有任务执行器被添加到 channel 中,以便在同一个线程上连续调用端点。
关于 Spring 集成 : How to know when a work flow completes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34820932/
我是一名优秀的程序员,十分优秀!