MessageChannelSpec.wireTap()
Spring Integration 包含一个 .wireTap()
fluent API MessageChannelSpec
构建器。以下示例演示如何使用 wireTap
方法记录输入:
@Bean
public QueueChannelSpec myChannel() {
return MessageChannels.queue()
.wireTap("loggingFlow.input");
}
@Bean
public IntegrationFlow loggingFlow() {
return f -> f.log();
}
如果 MessageChannel
是 InterceptableChannel
的一个实例,则 log()
, wireTap()
或 intercept()
运算符将应用于当前的 MessageChannel
。否则,一个中间 DirectChannel
会被注入到与当前配置的端点相应的流程中。在以下示例中,WireTap
拦截器被直接添加到 myChannel
,因为 DirectChannel
实现了 InterceptableChannel
:
@Bean
MessageChannel myChannel() {
return new DirectChannel();
}
...
.channel(myChannel())
.log()
}
当当前的 MessageChannel
没有实现 InterceptableChannel
时,一个隐式的 DirectChannel
和 BridgeHandler
会被注入到 IntegrationFlow
中,并且 WireTap
会被添加到这个新的 DirectChannel
。以下示例没有声明任何通道:
.handle(...)
.log()
}
在前面给出的例子中(以及任何时候都没有声明通道),会将一个隐式的 DirectChannel
注入到 IntegrationFlow
的当前位置,并将其用作当前配置的 ServiceActivatingHandler
(来自 .handle()
,前面已经介绍过) 的输出通道。