MessageChannelSpec.wireTap()
MessageChannelSpec.wireTap()
Spring Integration 包含了一个 .wireTap() 流式 API MessageChannelSpec 构建器。以下示例展示了如何使用 wireTap 方法来记录输入:
@Bean
public QueueChannelSpec myChannel() {
return MessageChannels.queue()
.wireTap("loggingFlow.input");
}
@Bean
public IntegrationFlow loggingFlow() {
return f -> f.log();
}
important
如果 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(),先前描述)的输出通道。