【问题标题】:Manual Acknowledgement of Messages : Spring Cloud Stream Kafka手动确认消息:Spring Cloud Stream Kafka
【发布时间】:2016-06-14 21:16:09
【问题描述】:

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

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

默认值:真。

我的问题是在将 autoCommitOffset 设置为 false 后,我如何确认消息?非常感谢您提供代码示例。

【问题讨论】:

  • 我不确定“Sprint Cloud Stream Kafka”是什么。但是,如果您使用常规的 Kafka 客户端,它应该提供一个名为“commit()”或类似手动提交偏移量的方法。

标签: apache-kafka spring-cloud-stream


【解决方案1】:

我已经在https://github.com/spring-cloud/spring-cloud-stream/issues/575https://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();
        }
    }
}

【讨论】:

  • 谢谢马吕斯。另外,请分享导入语句以了解确认类的 API。想看看有没有不确认消息的方法。
  • 这就是答案。谢谢马吕斯!
  • @marius-bogoevici: 这个功能在 Spring Cloud Stream 功能接口中可用吗?
猜你喜欢
  • 2018-06-20
  • 2020-07-26
  • 2021-06-03
  • 2021-06-12
  • 2016-12-27
  • 2018-07-18
  • 1970-01-01
  • 2020-05-21
  • 2018-08-29
相关资源
最近更新 更多