向Wire-Tapped Channels添加其他信息以便在Spring中登录

时间:2014-10-01 08:13:07

标签: spring-integration

我正在使用Wire-Tap来处理日志记录,我不允许使用logging-channel-adapter(因此log4j)。

我需要向有效负载添加其他信息,这些信息将被发送到具有处理日志的接口的网关。

有没有办法在流程中间没有指定标题扩充器?

澄清代码:

Wire-Tap部分

<int:channel id="IN_messageRouterFactory">
    <int:interceptors>
        <int:wire-tap channel="IN_log_gateway" />
    </int:interceptors>
</int:channel>

日志网关:

<int:gateway service-interface="foo.bar.loginterface">
    <int:method name="log" request-channel="IN_log_gateway" />
</int:gateway>

日志记录服务:

<int:chain input-channel="IN_log_gateway">
        <!-- transformations here... -->
    <int:service-activator ref="fileLoggerService"/>
</int:chain>

我想添加一些信息,以便我可以记录特定的托管有效负载信息

1 个答案:

答案 0 :(得分:0)

从很高的角度来看,你所要求的并不清楚。但无论如何,任何POJO服务都可以接受Message<?>作为参数。因此,您可以使用任何信息(payloadheaders)来执行任何逻辑。

从这里我看不出有<gateway>的理由,因为WireTap是单向组件,因此您的自定义logger不应返回任何结果。

<强>更新

感谢您的解释。

看起来最好通过一些消息丰富(就像你说header-enricher)那样做,因为你真的有一个message scope逻辑。

当然,您可以使用wire-tap克服此问题,但您必须拥有aggregatorcorrelategroup请求及其回复。再说一遍:如果没有header-enricher,你就无法实现这一目标。

顺便说一句,你甚至可以在标题中存储请求消息,并在你的上一个<service-activator>中使用它来获得正确的业务逻辑。