当应用程序包含多个 Binders 并希望自定义 Binders 时,可以通过提供实现来实现。 对于具有单个 Binder 程序的应用程序,则不需要此特殊定制器,因为 Binder 上下文可以直接访问自定义 bean。 但是,在多 Binder 方案中并非如此,因为各种 Binder 位于不同的应用程序上下文中。 通过提供 interface 的实现,Binders 尽管驻留在不同的应用程序上下文中,但将接收自定义。 Spring Cloud Stream 确保在应用程序开始使用 Binders 之前进行自定义。 用户必须检查 Binder 类型,然后应用必要的自定义。BinderCustomizerBinderCustomizerspring-doc.cn

下面是一个提供 bean 的示例。BinderCustomizerspring-doc.cn

@Bean
public BinderCustomizer binderCustomizer() {
    return (binder, binderName) -> {
        if (binder instanceof KafkaMessageChannelBinder kafkaMessageChannelBinder) {
            kafkaMessageChannelBinder.setRebalanceListener(...);
        }
        else if (binder instanceof KStreamBinder) {
            ...
        }
        else if (binder instanceof RabbitMessageChannelBinder) {
            ...
        }
    };
}

请注意,当存在多个相同类型的 Binder 实例时,可以使用 Binder 名称来筛选自定义。spring-doc.cn