【发布时间】:2017-06-19 13:58:07
【问题描述】:
我们有一个使用 spring-kafka 的 spring boot 应用程序。当我们更新配置属性时,我们想禁用 kafka 生产者(kafkatemplate)。我尝试过使用条件 bean,并使用 applicationcontext refresh。
有没有办法用 spring-kafka 优雅地关闭 kafkaproducer ?
【问题讨论】:
我们有一个使用 spring-kafka 的 spring boot 应用程序。当我们更新配置属性时,我们想禁用 kafka 生产者(kafkatemplate)。我尝试过使用条件 bean,并使用 applicationcontext refresh。
有没有办法用 spring-kafka 优雅地关闭 kafkaproducer ?
【问题讨论】:
您可以在DefaultKafkaProducerFactory 上调用destroy(),它会关闭(单例)生产者,但下一次某些代码调用createProducer() 时会创建另一个;目前没有办法阻止这种情况。当您不希望创建生产者时,您需要对工厂进行子类化并引发异常。
【讨论】:
KafkaTemplate 缓存了生产者;这是错误的;我们每次都应该从工厂中获取生产者。我打开了an issue。作为一种解决方法,您需要创建一个新的KafkaTemplate,以便它从工厂获取新的生产者。