在我的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();
,还是有另一种更合适的方法来实现它?
答案 0 :(得分:2)
当您引发异常时,容器将调用错误处理程序,该处理程序将重新查找未处理的消息,以便在下一次轮询时再次获取它们。
答案 1 :(得分:1)
您可以使用RecordFilterStrategy。
在此处查看文档:{{3}}