我需要在 spring 集成流中注入一个 callContext 对象作为线程本地。在 jms 标头中接收的 traceId 应该在 callContext 对象中提取 n 集,以便将其打印在项目级别配置的日志中。
IntegrationFlows.from(Jms.messageDrivenChannelAdapter(connectionFactory).destination(topicName))
.log(INFO, m-> “message received for: + ((Order)m.getPayload()).getOrderId())
.handle(orderService)
.get();
您可以在orderService
中执行此操作,也可以在它之前添加其他服务。
我想说的是log()
运算符的Function
使您可以完全控制要登录消息的内容。当然,也避免了ThreadLocal
开销。但是,如果您仍然想使用它,我建议您在该log()
之前进行.wireTap()
,这样您就可以在不影响主流的情况下将值存储在ThreadLocal
(MDC?(中。
只有你必须记住清洁的问题callContext
以某种方式避免螺纹局部污染。