Java @KafkaListner-跳过旧邮件或仅接收新邮件
我有工厂豆:Java @KafkaListner-跳过旧邮件或仅接收新邮件,java,spring,apache-kafka,spring-kafka,Java,Spring,Apache Kafka,Spring Kafka,我有工厂豆: @Bean public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory( CustomConsumerRebalanceListener consumerRebalanceListener, ConsumerFactory consumerFactory, CustomConfiguration customConfigurati
@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory(
CustomConsumerRebalanceListener consumerRebalanceListener, ConsumerFactory consumerFactory, CustomConfiguration customConfiguration) {
ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory);
factory.getContainerProperties().setAckOnError(false);
factory.setBatchListener(true);
factory.setStatefulRetry(true);
factory.setBatchErrorHandler(errorHandler());
factory.setConcurrency(customConfiguration.getConcurrency());
factory.getContainerProperties().setConsumerRebalanceListener(consumerRebalanceListener);
return factory;
}
如何将侦听器配置为在启动时只接收新消息而不获取旧消息?让您的侦听器实现
ConsumerSekAware
,并在分配分区时一直搜索到底。具体参见EDIT2之后的示例;改用seekToEnd
或者,您可以使用auto.offset.reset=latest
,并在每次启动应用程序时使用唯一的group.id
也
使用
synchronized
listener方法将破坏并发性;其他线程将等待同步。让您的侦听器实现ConsumerSekAware
并在分配分区时搜索到底。具体参见EDIT2之后的示例;改用seekToEnd
或者,您可以使用auto.offset.reset=latest
,并在每次启动应用程序时使用唯一的group.id
也
使用
synchronized
listener方法将破坏并发性;其他线程将等待同步。我从未使用过库,但我猜acknowledge.acknowledge()
确认实例仅适用于当前消息;看我的答案。我从未使用过lib,但我猜acknowledge.acknowledge()
确认实例仅适用于当前消息;看看我的答案。
@KafkaListener(topics = "${spring.kafka.topic}")
private synchronized void consumeKafkaQueue(@Payload String message, Acknowledgment acknowledgment) {
...
}
factory.setConcurrency(customConfiguration.getConcurrency());