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() 方法,前面已描述)的輸出通道。