【发布时间】:2020-09-25 07:53:43
【问题描述】:
我有一个flow,它以poller 开头,并使用task-executors 将消息传递给下游的多个async 流,以便在parallel 中针对给定数据集执行。下游aggregator 完成流程并通知轮询器flow 已完成。
我想使用MDC 来track 轮询器的每次执行,以便logs 可以映射到flow 的特定执行。
我首先将MDC 添加到轮询线程(使用Advice),但是使用这种方法可能会出现一些问题:
- 当
async切换发生时,如何在执行程序线程上标记MDC? - 由于执行器使用
thread pool,我是否需要在thread返回池之前清除MDC?会有副作用吗?
另一种方法是将MDC 添加到Message 标头,并在async 切换期间手动将其设置在新的thread 上。 怎么做? 例如,如果我打开 debug 日志,MDC 应该在新的 thread 执行开始时被标记,而不是从我的逻辑从service activator 开始。
如何使用XML 配置在task-executor 线程上设置它(并且可能在返回池之前也删除)?类似于MdcAwareThreadPoolExecutor 看到here。
另外,我不希望MDC 逻辑分布在所有async 切换端点上,可能有一些通用的配置方法吗?
有没有更好的方法来实现这一点?任何已知的解决方案?
【问题讨论】: