mq消费幂等总结

mq消费幂等总结

针对mq新增场景:

1)首先查本地db书否已存在,存在则幂等

2)加redis乐观锁,加锁失败重试mq,

3)理论上上边2步可以解决大部分数据重复新增的问题,但是针对并发情况下,乐观锁超时释放的情况,数据库需要加唯一索引(outId, outType)进行兜底

 

针对mq更新场景:

1、单个更新:与新增类似

2、批量更新:

1)每次处理单条主数据,每条失败都会重试全部

2)加redis乐观锁,加锁失败重试mq,

3)针对新增的数据进行db幂等校验,幂等则结束此条数据处理(for 循环 continue)

4)针对更新的数据,通过加数据库version条件进行db更新

5)针对删除的数据进行处理,如果没有要删除的,则结束此条数据处理(for 循环 continue);

如果有要删除的,则需要进行db操作,一般的做法是变更db的状态为删除状态;

 

 

针对mq删除场景:

1、单个删除:与新增类似

2、批量更新:

1)首先查本地db是否仍存在,不存在则幂等

2)1、不加锁的情况:i.每次更新时因为带了version条件,所以并发情况下可能更新失效,因为已经db数据被删除,耗费一次db操作;

ii.失败的情况下,全量回滚db操作;

2、加锁的情况:1)锁批量消息范围太广,导致锁失效

2)锁单个消息:

i.先校验db的数据状态是否为已删除,删除则跳过;

ii.并发情况下,因为某个处理失败,可能出现mq重试的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云渊阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值