未解决|TransmittableThreadLocal 怎么用| 阿里线程池工具避免手动在传递MDC traceId
traceId的实现方式除了slf4j的MDC,还有阿里开源的工具TransmittableThreadLocal,一个增强版本的ThreadLocal【还没实践过,暂时挖个坑】
在阿里巴巴的技术栈中,确实有解决方案可以避免手动通过MDC(Mapped Diagnostic Context)传递traceId。主要有以下几种方式:
- TTL (TransmittableThreadLocal) + 线程池包装
阿里巴巴开源的TransmittableThreadLocal(TTL)可以解决线程池场景下的上下文传递问题。
使用方式:
// 创建线程池
ExecutorService executorService = Executors.newCachedThreadPool();
// 使用TtlExecutors包装
executorService = TtlExecutors.getTtlExecutorService(executorService);// 提交任务
executorService.execute(() -> {// 这里可以自动获取到父线程的MDC上下文String traceId = MDC.get("traceId");
});