【发布时间】:2020-05-23 04:15:03
【问题描述】:
我有一个在 Tomcat 线程 上运行的 classA。 ClassA 正在维护一组 MDC 键值对。
随着 ClassA 的执行,MDC.getCopyOfContextMap() 返回 (A="a", B="b", C="c")
现在,ClassA 调用运行在 Hystrix 线程 上的 classB。
当我们进入 ClassB 时,来自 ClassA 的 MDC 被复制,MDC.getCopyOfContextMap() 返回 (A="a", B="b", C="c")。
ClassB 将变量 X 的值设置为 MDC。
MDC.put("X", String.valueOf("someVal"))
当仍在 ClassB 内时,MDC.getCopyOfContextMap() 返回 (A="a", B="b", C="c", X="someVal")。
ClassA 收到 MDC 并尝试访问变量 X。
MDC.get(X)
但是因为MDC.getCopyOfContextMap() 返回 (A="a", B="b", C="c"),所以它得到了 null。
有什么建议为什么 MDC 没有从 Hystrix 线程转移到 tomcat 线程?
【问题讨论】:
-
疯狂猜测:不同的类加载器
标签: java multithreading tomcat hystrix mdc