手动确认消息:Spring Cloud Stream Kafka

时间:2016-06-14 21:16:09

标签: apache-kafka spring-cloud-stream

我想要实现的场景是使用来自Kafka的消息,处理它,如果某些条件失败,我不想确认该消息。为此我在spring cloud stream参考文档中找到了

autoCommitOffset 是否在处理消息时自动提交偏移量。如果设置为false,则会在消息头中提供一个确认标头,用于延迟确认。

默认值:true。

我的问题是在将autoCommitOffset设置为false后,如何确认消息?代码示例将非常受欢迎。

1 个答案:

答案 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();
        }
    }
}