将ConsumerRebalanceListener添加到ConcurrentKafkaListenerContainerFactory

时间:2018-11-29 11:39:28

标签: spring-kafka

在Spring Boot应用程序中,我使用带有@KafkaListener注释的类作为消息侦听器。我想在我的应用程序中添加一个ConsumerRebalanceLister来管理重新平衡时的缓存数据。

如何将ConsumerRebalanceListener添加到ConcurrentKafkaListenerContainerFactory。 documentation说应该在ContainerProperties对象上设置它。目前尚不清楚如何访问该对象以进行设置。此外,ConcurrentKafkaListenerContainerFactory似乎丢弃了重新平衡侦听器,因为它在创建侦听器容器实例时会创建一个新的ContainerProperties对象。

this commit之前,有一种方法可以直接在ConcurrentKafkaListenerContainerFactory上直接设置重新平衡监听器。

1 个答案:

答案 0 :(得分:2)

考虑在ConcurrentKafkaListenerContainerFactory上使用此方法:

/**
 * Obtain the properties template for this factory - set properties as needed
 * and they will be copied to a final properties instance for the endpoint.
 * @return the properties.
 */
public ContainerProperties getContainerProperties() {

您可以在此处添加ConsumerRebalanceListener。您@Autowired自动配置的ConcurrentKafkaListenerContainerFactory并执行上述注入操作:

@Autowired
private ConcurrentKafkaListenerContainerFactory containerFactory;

@PostConstruct
public void init() {
    this.containerFactory.getContainerProperties()
            .setConsumerRebalanceListener(myConsumerRebalanceListener());
}

@Bean
public ConsumerRebalanceListener myConsumerRebalanceListener() {
    return new ConsumerRebalanceListener() {
        ...
    };
}