Spring Kafka按侦听器中的条件丢弃消息

时间:2018-08-06 07:20:41

标签: spring-boot apache-kafka spring-kafka

在我的Spring Boot / Kafka项目中,我具有以下侦听器:

@KafkaListener(topics = "${kafka.topic.update}", containerFactory = "updateKafkaListenerContainerFactory")
public void onUpdateReceived(ConsumerRecord<String, Update> consumerRecord, Acknowledgment ack) {

    // do some logic

    ack.acknowledge();
}

在侦听器内部,我需要根据我的业务逻辑检查某些条件,如果不满足,请跳过对该特定消息的处理,并让Kafka知道再次发送此消息。

我需要这个的原因-根据我应用程序的业务逻辑,我需要避免每秒发送超过一个帖子到特定的Telegram聊天中。这就是为什么我想在Kafka监听器中检查chatLastSent时间并在需要时推迟消息发送(通过将消息重新传递到此Kafka主题)

如何正确执行?这次我是否不需要执行ack.acknowledge();,还是有另一种更合适的方法来实现它?

2 个答案:

答案 0 :(得分:2)

使用SeekToCurrentErrorHandler

当您引发异常时,容器将调用错误处理程序,该处理程序将重新查找未处理的消息,以便在下一次轮询时再次获取它们。

答案 1 :(得分:1)

您可以使用RecordFilterStrategy。

在此处查看文档:{​​{3}}