我想要实现的场景是使用来自Kafka的消息,处理它,如果某些条件失败,我不想确认该消息。为此我在spring cloud stream参考文档中找到了
autoCommitOffset 是否在处理消息时自动提交偏移量。如果设置为false,则会在消息头中提供一个确认标头,用于延迟确认。
默认值:true。
我的问题是在将autoCommitOffset设置为false后,如何确认消息?代码示例将非常受欢迎。
答案 0 :(得分:3)
我在这里提供了问题的答案https://github.com/spring-cloud/spring-cloud-stream/issues/575
基本上归结为设定
spring.cloud.stream.kafka.bindings.input.consumer.autoCommitOffset=false
然后处理确认标题:
@SpringBootApplication
@EnableBinding(Sink.class)
public class ManuallyAcknowdledgingConsumer {
public static void main(String[] args) {
SpringApplication.run(ManuallyAcknowdledgingConsumer.class, args);
}
@StreamListener(Sink.INPUT)
public void process(Message<?> message) {
System.out.println(message.getPayload());
Acknowledgment acknowledgment = message.getHeaders().get(KafkaHeaders.ACKNOWLEDGMENT, Acknowledgment.class);
if (acknowledgment != null) {
System.out.println("Acknowledgment provided");
acknowledgment.acknowledge();
}
}
}