MDC未从Hystrix线程传输到tomcat线程

ugmeyewa  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(170)

我有一个运行在Tomcat线程上的类A。类A维护着一组MDC键值对。
当ClassA被执行时,MDC.getCopyOfContextMap()返回(A=“a”,B=“b”,C=“c”)
现在,ClassA调用在Hystrix线程上运行的ClassB。
当我们进入ClassB时,来自ClassA的MDC被复制,并且MDC.getCopyOfContextMap()返回(A=“a”,B=“b”,C=“c”)。
类B将变量X的值设置到MDC中。MDC.put("X", String.valueOf("someVal"))当仍在类B中时,MDC.getCopyOfContextMap()返回(A=“a”,B=“b”,C=“c”,X=“someVal”)。
ClassA接收MDC并尝试访问变量X。
MDC.get(X)
但是它得到的是空值,因为MDC.getCopyOfContextMap()返回(A=“a”,B=“b”,C=“c”)。
为什么MDC没有从Hystrix线程转移到tomcat线程,有什么建议吗?

kupeojn6

kupeojn61#

字符串.valueOf(“某个值”)
我认为,你必须使用变量而不是“someValue”String.valueOf(variable)

rqqzpn5f

rqqzpn5f2#

MDC的工作方式与ThreadLocal的工作方式类似。它链接到当前线程,并且在线程池的情况下不会自动传输(Hystrix也使用线程池)。
因此,您需要将MDC从主线程复制到hystrix线程(虽然不是您的用例),并从hystrix线程复制到主线程。
您可以使用HystrixHook来完成此操作。
看看这个blog

相关问题