【发布时间】:2021-12-02 20:55:53
【问题描述】:
我们使用的是 Spring kafka 2.7 非阻塞重试机制。在 Spring Kafka 重试机制期间,kafka 监听器消费来自 main topic、retry topic 和 DLT Topic 的消息, 我们希望侦听器仅从主主题和重试主题中消费。
有没有简单的设置方法?
因为我们不希望同一个消费者处理 DLT 消息。 DLT 也将被另一个进程使用,以发送请求通知。
// our configuration
@Bean
public ConcurrentKafkaListenerContainerFactory<String, Object> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, Object> factory
= new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
@Bean
public RetryTopicConfiguration retryTopicConfiguration(KafkaTemplate<String, Object> template) {
List<Class<? extends Throwable>> throwableList = Arrays.asList(IllegalArgumentException.class,
IllegalAccessException.class);
return RetryTopicConfigurationBuilder
.newInstance()
.dltHandlerMethod(XYZ.class, "xyz")
.exponentialBackoff(delayMs, backoffMultiplier, maxIntervalInMs)
.maxAttempts(retryAttempt)
.notRetryOn(throwableList)
.doNotAutoCreateRetryTopics()
.listenerFactory(kafkaListenerContainerFactory())
.setTopicSuffixingStrategy(TopicSuffixingStrategy.SUFFIX_WITH_INDEX_VALUE)
.create(template);
}
【问题讨论】:
-
@GaryRussell : 请帮忙
标签: java spring spring-boot apache-kafka spring-kafka