指定 ListenerContainerFactory

預設情況下,RetryTopic 組態將使用 @KafkaListener 註解中提供的 factory,但您可以指定不同的 factory,用於建立重試主題和 DLT 監聽器容器。

對於 @RetryableTopic 註解,您可以提供 factory 的 bean 名稱,並且使用 RetryTopicConfiguration bean,您可以提供 bean 名稱或實例本身。

@RetryableTopic(listenerContainerFactory = "my-retry-topic-factory")
@KafkaListener(topics = "my-annotated-topic")
public void processMessage(MyPojo message) {
    // ... message processing
}
@Bean
public RetryTopicConfiguration myRetryTopic(KafkaTemplate<Integer, MyPojo> template,
        ConcurrentKafkaListenerContainerFactory<Integer, MyPojo> factory) {
    return RetryTopicConfigurationBuilder
            .newInstance()
            .listenerFactory(factory)
            .create(template);
}

@Bean
public RetryTopicConfiguration myOtherRetryTopic(KafkaTemplate<Integer, MyPojo> template) {
    return RetryTopicConfigurationBuilder
            .newInstance()
            .listenerFactory("my-retry-topic-factory")
            .create(template);
}
自 2.8.3 版起,您可以對可重試和不可重試主題使用相同的 factory。