新闻详情
19-线程上下文传播:异步执行为什么容易丢 Trace
19-线程上下文传播:异步执行为什么容易丢 Trace
核心问题:线程池、定时任务、CompletableFuture 如何影响链路连续性。先说结论TraceId 常放在 ThreadLocal 中,但线程切换后 ThreadLocal 不会自动传播。线程池、定时任务和异步回调都会导致链路上下文丢失。解决方式通常是在提交任务时捕获上下文,在执行任务时恢复上下文。这篇文章能带你完成什么你不用先掌握所有 Java Agent 概念。本篇先让你做出一个能运行的小结果:复制代码、执行命令、看到输出。跑通以后,再回头看图和源码,你会更容易理解这个机制在 JVM Sandbox 里负责哪一块。整个专栏都按这个节奏来:先做出来,再解释为什么。先把几个词讲明白上下文传播上下文传播指把当前请求的 TraceId 从一个线程带到另一个线程。ThreadLocal 默认不会自动跨线程。可以怎么理解它像接力赛传棒:主线程有 TraceId,但新线程不会天然拿到,必须显式传过去。本篇先抓住什么这一篇要让你记住两个动作:提交任务时捕获上下文,执行结束后恢复或清理上下文。如果这些词现在还不能完全理解也没关系。先按下面步骤把代码跑起来,再回头看这一段,会更容易对上。本篇