我有一个springboot项目,它接收关于Kafka主题的消息。应用程序本身相当简单。
接收消息
对另一个服务执行rest请求。
成功时确认消息。
如果由于任何原因,rest请求失败,将实现无限指数退避以继续尝试rest请求(消息有一个过期时间,超过该时间时,将丢弃该时间以防止消息永久重试)。
场景:接收到一条消息,该消息使rest请求失败并处于重试循环(偏移量1)。接收到另一条成功的消息(偏移量2)。第二条消息确认该消息,因为它成功地将分区偏移量设置为2。
如果应用程序在此场景中崩溃或关闭,当它返回时,消息(偏移量1)将丢失。
如何确保确认是连续的?重放消息不是一个问题,因为在跟踪消息状态的数据库的支持下实现了重复数据消除逻辑。
1条答案
按热度按时间z5btuh9x1#
实现了无限指数退避以继续尝试rest请求
接收到另一条成功的消息(偏移量2)。
如果您通过
ExponentialBackOff
在侦听器容器的SeekToCurrentErrorHandler
.您将始终获得补偿1重新交付,直到成功;在此之前,将不会看到偏移量2。