指定 ListenerContainerFactory
默认情况下,RetryTopic 配置将使用 @KafkaListener 注解中提供的工厂,但你可以指定另一个工厂,用于创建重试主题和 dlt 监听器容器。
对于 @RetryableTopic 注解,你可以提供工厂的 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);
}
important
自 2.8.3 起,你可以将同一个工厂同时用于可重试主题和不可重试主题。