我需要在spring集成流中注入一个callContext对象作为thread Local。在jms头中接收到的traceId应该在callContext对象中提取和设置,以便在项目级别配置的日志中打印出来。
IntegrationFlows.from(Jms.messageDrivenChannelAdapter(connectionFactory).destination(topicName))
.log(INFO, m-> “message received for: + ((Order)m.getPayload()).getOrderId())
.handle(orderService)
.get();发布于 2019-10-14 21:39:52
你可以在你的orderService中这样做,或者在它之前添加另一个服务。
发布于 2019-10-15 03:53:13
我想说的是,log()的Function操作员为您提供了对您想要登录到消息中的内容的完全控制。当然,也避免了ThreadLocal的开销。但是如果你仍然想使用它,我建议在这个log()之前使用一个.wireTap(),这样你就可以在你的ThreadLocal中存储一个值(MDC?)而不会影响主流。
唯一的问题是,你必须记得以某种方式清理那个callContext,以避免线程局部污染。
https://stackoverflow.com/questions/58341685
复制相似问题