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`中借用一些示例: