Как ввести переменную в threadlocal в потоке интеграции весной - PullRequest
0 голосов
/ 11 октября 2019

Мне нужно внедрить объект callContext как поток Local в весенний поток интеграции. TraceId, полученный в заголовке jms, должен быть извлечен из набора в объекте callContext, чтобы он был напечатан в журнале, настроенном на уровне проекта.

IntegrationFlows.from(Jms.messageDrivenChannelAdapter(connectionFactory).destination(topicName))
.log(INFO, m-> “message received for: + ((Order)m.getPayload()).getOrderId())
.handle(orderService)
.get();

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Я бы сказал, что оператор Function для log() предоставляет вам полный контроль над тем, что вы хотели бы войти в сообщение. Конечно, также избегая накладных расходов с ThreadLocal. Но если вы все еще хотите его использовать, я бы предложил .wireTap() до этого log(), чтобы вы могли сохранить значение в вашем ThreadLocal (MDC?) Без влияния на основной поток.

Только проблема, которую вы должны помнить, чтобы очистить callContext как-нибудь, чтобы избежать локального загрязнения потока.

0 голосов
/ 14 октября 2019

Вы можете просто сделать это в своем orderService или добавить другой сервис прямо перед ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...