1.消息消费失败,要求重新消费,循环失败消息,逐条发送
2.消息封装最大重试次数,消息当前延迟级别的信息,开始发送
3.broker服务器获取信息,获取订阅组配置信息,是否当前组可重试小于0等
4.commitlog获取详细信息,变更message的topic为retryTopic,原topic放入属性参数
5.根据重试次数和延迟级别判断,如果不符合条件topic设置为死信队列,人工触发处理(topic放入属性)
6.原msgId放入属性
7.messgae存储,判断如果是延迟级别>0,topic改为定时topic,当前的重试topic放入属性
8.存入成功返回结果
持久化消息进度的方式:
1.定时任务每10秒持久化一次,2.负载平衡对于移除的队列进行远程持久化进度,3.拉取的消费数据非法,进行持久化,移除待处理的当前队列信息
Ack卡进度解决方案:
流控不再拉消息,定时扫描清除发回broker重发