Spring 异步流和任务执行器的集成 MDC
Spring Integration MDC for Async Flow and Task Executors
我有一个以 poller
开头的 flow
并使用 task-executors
将消息传递给下游的几个 async
流以在 parallel
中执行对于给定的数据集。下游 aggregator
完成流程并通知轮询器 flow
已完成。
我想 track
通过使用 MDC
轮询器的每次执行,以便 logs
可以映射到 flow
的特定执行。
我首先将 MDC
添加到轮询器线程(使用 Advice
),但是使用这种方法可能会出现几个问题:
- 如何在
async
切换发生时在执行程序线程上标记 MDC
?
- 既然executor使用了一个
thread pool
,我需要在thread
returns到池之前清除MDC
吗?会不会有副作用?
另一种方法是将 MDC
添加到 Message
header 并在 async
切换期间在新的 thread
上手动设置它。 怎么做? 例如,如果我打开 debug
日志,MDC
应该从新 [=28= 的开头开始标记] 执行,而不是从我的逻辑在 service activator
开始的那一点。
如何使用 XML
配置在 task-executor
线程上设置它(并且可能在返回池之前删除)?像 MdcAwareThreadPoolExecutor
看到的东西 here。
另外,我不希望 MDC
逻辑分布在所有 async
切换端点上,可能有一些通用的配置方法吗?
有没有更好的方法来实现这个?任何已知的解决方案?
I would like to track every execution of the poller by using MDC so that the logs can be mapped to a particular execution of the flow.
“您想跟踪流程中的消息旅程”完全正确。正如您所注意到的,有一种方法可以设置一些消息 header。那么,为什么不通过这个特定的 header 映射您的日志?
您可以查看消息历史记录模式,了解如何收集消息的完整路径,然后在日志中您可以通过查看消息 headers 来追踪它。
如果你真的仍然坚持使用 MDC,那么你肯定需要看看一些 MDCDelegatingExecutorDecorator. Some sample you can borrow from Spring Security and its
DelegatingSecurityContextExecutor`:https://docs.spring.io/spring-security/site/docs/5.4.0/reference/html5/#concurrency
我有一个以 poller
开头的 flow
并使用 task-executors
将消息传递给下游的几个 async
流以在 parallel
中执行对于给定的数据集。下游 aggregator
完成流程并通知轮询器 flow
已完成。
我想 track
通过使用 MDC
轮询器的每次执行,以便 logs
可以映射到 flow
的特定执行。
我首先将 MDC
添加到轮询器线程(使用 Advice
),但是使用这种方法可能会出现几个问题:
- 如何在
async
切换发生时在执行程序线程上标记MDC
? - 既然executor使用了一个
thread pool
,我需要在thread
returns到池之前清除MDC
吗?会不会有副作用?
另一种方法是将 MDC
添加到 Message
header 并在 async
切换期间在新的 thread
上手动设置它。 怎么做? 例如,如果我打开 debug
日志,MDC
应该从新 [=28= 的开头开始标记] 执行,而不是从我的逻辑在 service activator
开始的那一点。
如何使用 XML
配置在 task-executor
线程上设置它(并且可能在返回池之前删除)?像 MdcAwareThreadPoolExecutor
看到的东西 here。
另外,我不希望 MDC
逻辑分布在所有 async
切换端点上,可能有一些通用的配置方法吗?
有没有更好的方法来实现这个?任何已知的解决方案?
I would like to track every execution of the poller by using MDC so that the logs can be mapped to a particular execution of the flow.
“您想跟踪流程中的消息旅程”完全正确。正如您所注意到的,有一种方法可以设置一些消息 header。那么,为什么不通过这个特定的 header 映射您的日志?
您可以查看消息历史记录模式,了解如何收集消息的完整路径,然后在日志中您可以通过查看消息 headers 来追踪它。
如果你真的仍然坚持使用 MDC,那么你肯定需要看看一些 MDCDelegatingExecutorDecorator. Some sample you can borrow from Spring Security and its
DelegatingSecurityContextExecutor`:https://docs.spring.io/spring-security/site/docs/5.4.0/reference/html5/#concurrency