Kafka ProducerListener在多Spring Cloud Stream绑定器场景下无法正常工作
自定义Spring Cloud Stream Kafka绑定器下ProducerListener回调失效的解决方案
问题根源
当配置自定义/多个Kafka绑定器时,Spring Cloud Stream的Kafka绑定器会独立初始化内部的KafkaTemplate实例,不会自动感知容器中已注册的ProducerListener Bean。而默认绑定器模式下,Stream会复用KafkaAutoConfiguration创建的KafkaTemplate,这个Template会自动注入全局的ProducerListener,因此能正常触发回调。
解决方案
只需在自定义绑定器的配置中,显式指定要关联的ProducerListener Bean名称:
修改绑定器配置
在自定义绑定器的environment节点下添加producer-listener-bean-name配置,值为你定义的ProducerListener的Bean名称(比如你的Bean叫customProducerListener):spring.cloud.stream.default-binder=secondaryKafka spring.cloud.stream.binders.secondaryKafka.type=kafka spring.cloud.stream.binders.secondaryKafka.environment.spring.cloud.stream.kafka.binder.brokers=localhost:9092 # 显式指定ProducerListener Bean spring.cloud.stream.binders.secondaryKafka.environment.spring.cloud.stream.kafka.binder.producer-listener-bean-name=customProducerListener确保ProducerListener Bean全局可见
你的ProducerListener Bean必须注册在Spring根上下文(比如用@Component注解,或者在@Configuration类中用@Bean声明),不能放在绑定器专属的隔离配置里。
验证
重启服务后,发送测试消息,检查ProducerListener的onSuccess和onError方法是否正常执行。
内容的提问来源于stack exchange,提问作者Karthik
相关产品推荐
相关产品推荐

