Spring Integration Flow Level CorrelationId用于记录和跟踪流程

问题描述

我的流程从轮询入站适配器开始,该适配器使用异步执行器和服务激活器(使用2个网关的协调​​器)将处理交给发布/订阅通道上的下游组件

问题

1。。我想记录每次轮询执行的相关性ID,以便我可以使用此correlationId来独立于同一流的另一次执行来跟踪该流执行的日志类似于带有UUID的MDC。如何将其传递给处理中涉及的所有线程并在log语句中输出correlationId?

2。。我还试图找出什么是最好的日志记录方法。目前,我在所有通道上都有一个日志记录wireTap(由日志记录适配器消耗)。为此,我希望仅在日志记录模式为DEBUG时才能启用wireTap拦截 例如,

 <int:logging-channel-adapter log-full-message="true"
                                 logger-name="tapInbound"
                                 level="DEBUG"
                                 id="loggingChannel"/>

这仅在应用程序记录器为DEBUG时记录,但wireTap拦截将始终发生。仅在日志级别为DEBUG时,如何启用WireTap拦截?可能通过使用selector-expression之类的值来使用isloggingLevelDebug()。我该怎么做?

解决方法

  1. 您可以在第一个频道上使用advice on the poller或自定义拦截器来设置相关性。

  2. 您可以在早期(SmartLifecycle)中以编程方式将其分配到Integer.MIN_VALUE bean中的通道中,而不用XML声明性地声明。