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();
}

如果 MessageChannelInterceptableChannel 的实例,则 log()wireTap()intercept() 操作符会应用于当前的 MessageChannel。否则,会将一个中间的 DirectChannel 注入到当前配置的端点的流程中。在以下示例中,WireTap 拦截器直接添加到 myChannel 中,因为 DirectChannel 实现了 InterceptableChannel

@Bean
MessageChannel myChannel() {
    return new DirectChannel();
}

...
    .channel(myChannel())
    .log()
}

当当前的 MessageChannel 没有实现 InterceptableChannel 时,会在 IntegrationFlow 的当前位置注入一个隐式的 DirectChannelBridgeHandler,并将 WireTap 添加到这个新的 DirectChannel 中。以下示例没有任何通道声明。

.handle(...)
.log()
}

在前面的示例(以及任何没有声明通道的情况下),一个隐式的 DirectChannel 会被注入到 IntegrationFlow 的当前位置,并用作当前配置的 ServiceActivatingHandler(来自 .handle() 方法,前面已描述)的输出通道。