文章预览
我想再讨论一下上次的这篇文章 《哎,被这个叫做at least once的玩意坑麻了》 因为有些朋友看完之后再评论区给出了自己的思考,也有朋友和我私聊,分享了自己的看法,我觉得有些想法很好,所以我决定一鱼两吃,再聊聊这个问题。 假设,我们是一场面试,面试官给你抛出了这样一个问题: 如果一个消费队列由于某些原因,对于某个消息发起了两次。导致一样的数据落库两条,请问你会怎么处理这个问题? 这题你一拿到手上,应该就立马能分析出是在问如何实现一个幂等机制。 想着这玩意我熟啊,张口就能给出方案: 业务消息 = select(业务唯一流水号); if (业务消息 == null){ save(业务消息); } 面试官一听,提示道:你这个方案在多线程的情况下会不会有什么问题呢? 于是你的小脑瓜子立刻开始转了起来:先查询,再判断,最后保存。 如
………………………………