微服务链路追踪断点:TraceID 在异步线程丢失?TTL 自动绑定+MDC 上下文透传
问题背景 在微服务架构中,链路追踪是排查问题的关键手段。通过 TraceID,我们可以将分布式系统中各个服务的日志串联起来,还原完整的请求链路。然而,当业务代码中存在异步调用时,你可能会遇到这样的问题: 2024-01-15 10:00:00.001 [http-nio-8080-exec-1] INFO OrderService - [traceId=abc-123] 创建订单成功 2024-01-15 10:00:00.050 [async-thread-1] INFO PaymentService - [traceId=null] 支付处理中 2024-01-15 10:00:00.100 [async-thread-2] INFO NotifyService - [traceId=null] 发送通知 可以看到,主线程中有 TraceID,但在异步线程中丢失了。这导致我们无法将整个链路的日志关联起来,排查问题时只能看到零散的日志片段。 为什么会丢失? ThreadLocal 局限:MDC 底层使用 ThreadLocal 存储 TraceID,而 ThreadLocal 的....