Spring integration 用于异步流和任务执行器的Spring集成MDC
我有一个Spring integration 用于异步流和任务执行器的Spring集成MDC,spring-integration,mdc,Spring Integration,Mdc,我有一个流,它以一个轮询器开始,并将消息传递给几个异步流,使用任务执行器对给定数据集并行执行。下游聚合器完成该流,并通知轮询器流已完成 我想通过使用MDC跟踪轮询器的每次执行,以便日志可以映射到流的特定执行 我首先将MDC添加到轮询器线程(使用Advice),但是使用这种方法可能会有两个问题: 当发生async切换时,如何在执行器线程上标记MDC 由于executor使用线程池,我是否需要在线程返回池之前清除MDC?会有副作用吗 另一种方法是将MDC添加到消息头中,并在异步切换期间在新的线程上手
流
,它以一个轮询器
开始,并将消息传递给几个异步
流,使用任务执行器
对给定数据集并行执行。下游聚合器
完成该流,并通知轮询器流
已完成
我想通过使用MDC
跟踪轮询器的每次执行,以便日志可以映射到流的特定执行
我首先将MDC
添加到轮询器线程(使用Advice
),但是使用这种方法可能会有两个问题:
当发生async
切换时,如何在执行器线程上标记MDC
由于executor使用线程池
,我是否需要在线程
返回池之前清除MDC
?会有副作用吗
另一种方法是将MDC
添加到消息
头中,并在异步
切换期间在新的线程
上手动设置它。怎么做?例如,如果我打开debug
日志,MDC
应该从新线程执行的开始,而不是从服务激活器中我的逻辑开始的点开始。
如何使用XML
配置在task executor
线程上设置此选项(可能在返回池之前删除)?类似于看到的MdcAwareThreadPoolExecutor
。
另外,我不希望MDC
逻辑分布在所有async
切换端点上,是否有一些通用的方法来配置它
有没有更好的方法来实现这一点?有什么已知的解决方案吗
我希望通过使用MDC跟踪轮询器的每个执行,以便将日志映射到流的特定执行
它听起来完全像是“您想在您的流程中跟踪消息旅程”。正如您所注意到的,有一种方法可以设置一些消息头。那么,为什么不通过这个特定的头映射日志呢
您可以查看消息历史记录模式,了解如何收集消息的整个路径,以便在日志中跟踪消息头
请看这里:
如果您仍然坚持使用MDC,那么您肯定需要查看一些MDCDelegatingExecutorDecorator。您可以从Spring Security及其
DelegatingSecurityContextExecutor`中借用一些示例:
我希望通过使用MDC跟踪轮询器的每个执行,以便将日志映射到流的特定执行
它听起来完全像是“您想在您的流程中跟踪消息旅程”。正如您所注意到的,有一种方法可以设置一些消息头。那么,为什么不通过这个特定的头映射日志呢
您可以查看消息历史记录模式,了解如何收集消息的整个路径,以便在日志中跟踪消息头
请看这里:
如果您仍然坚持使用MDC,那么您肯定需要查看一些MDCDelegatingExecutorDecorator。您可以从Spring Security及其
DelegatingSecurityContextExecutor`中借用一些示例: