Spring集成-使用MDC记录每条消息以能够汇总消息

时间:2019-02-04 18:08:26

标签: spring-integration log4j2 spring-integration-dsl mdc

我正在使用SpringIntegration的IntegrationFlows定义消息流,并使用Jms.messageDrivenChannelAdapter从MQ获取消息,现在我需要解析它,将其发送到KAFKA并更新Couchbase。

IntegrationFlows
                .from(Jms.messageDrivenChannelAdapter(this.acarsMqListener))  //MQ Listener with session transacted=true
                .wireTap(ACARS_WIRE_TAP_CHNL)                                 // Logging the message
                .transform(agmTransformer, "parseXMLMessage")                                 .filter(acarsFilter,"filterMessageOnSmiImi")                  // Filter the message based on condition
                .handle(acarsProcessor, "processEvent")                       // Create the message
                .handle(Kafka.outboundChannelAdapter(kafkaTemplate).messageKey(MESSAGE_KEY).topic(acarsKafkaTopic))  //send it to kafka
                .handle(updateCouchbase, "saveToDB")                          // Update couchbase
                .get();

对于每条收到的消息,我们都希望使用MDC进行记录,以帮助我们根据UUID进行收集/汇总。 请建议如何将UUID放入MDC,然后为上述流程中的每条消息清除MDC

1 个答案:

答案 0 :(得分:0)

您只需要配置 global WireTap并在记录消息之前在该有线窃听流中在那里进行适当的转换即可。

另一方面,可能只需要使用MDC,因为您可以像往消息中注入For标头之类的内容,并像往常一样log(),因此您将在日志中看到消息,并且能够使用该标头进行关联。