MD C не переносится из потока Hystrix в поток Tomcat - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть classA, который работает на Tomcat thread . ClassA поддерживает набор пар ключ-значение MD C.

При выполнении ClassA возвращается MDC.getCopyOfContextMap() (A = "a", B = "b", C = "c ")

Теперь ClassA вызывает classB, который работает в потоке Hystrix .

Когда мы вводим ClassB, MD C из ClassA копируется и MDC.getCopyOfContextMap() возвращает (A = "a", B = "b", C = "c").

ClassB устанавливает значение переменной X в MD C. MDC.put("X", String.valueOf("someVal")) Когда все еще внутри ClassB, MDC.getCopyOfContextMap() возвращает (A = "a", B = "b", C = "c", X = "someVal").

ClassA получает MD C и пытается получить доступ к переменной X.

MDC.get(X)

Но он получает его как ноль, потому что MDC.getCopyOfContextMap() возвращает (A = "a", B = "b", C = "c").

Есть предложения, почему MD C не переносится из потока Hystrix в поток Tomcat?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

MDC работает аналогично тому, как ThreadLocal работает. Он связан с текущим потоком и не переносится автоматически в случае threadPools (Hystrix также использует threadPool).

Так что вам нужно скопировать MDC из основного потока в поток Hystrix (не ваш вариант использования хотя) и от потока Hystrix до основного потока.

Вы можете использовать HystrixHook для выполнения sh этого.

Посмотрите на этот блог

0 голосов
/ 07 февраля 2020

String.valueOf ("someVal")

Я думаю, вы должны использовать переменную вместо "someValue" String.valueOf (variable)

...