type
status
category
date
slug
summary
tags
password
icon
😀
消息幂等:执行n次的最终结果都一样
 

📝 主旨内容

为什么会多次执行?(问题场景)上游颁发一个唯一id比如说订单号
重试机制,上游投递消息的时候,如果超时了,就会一直重试,其实超时可能这个消息真是投递过来了对吧,这个消息队列就接收到了很多一样的消息对吧,就导致下游消费者可能消费到了很多一样的数据了。

💡
解决方案:
redis分布式锁做校验(第一个性能好,第二个防止同时有很多消息过来)
一般前两步是放在本地事务当中的
第一步先校验(插入记录表),如果是第一次,没有数据那么就直接插入进来了。
第二步执行业务逻辑(订单发货,扣减库存都可以)
 
第三步手动ack(确认消费成功)
如果下次还有同样的订单id进来了,就会插入失败,因为已经记录了。也就不会执行之后的业务逻辑了。

redis分布式锁做校验原理
分布式环境当中只有一个线程可以获取到锁
 
set nx
set if not exist(不存在就赋值)
💡
mysql可以使用唯一索引来实现锁
为什么要使用redis实现锁
效率高,基于内存
 
恶意代码考试复习题MVCC和事务底层原理两阶段提交
Guxi8086
Guxi8086
一个普通的干饭人🍚
公告
type
status
category
date
slug
summary
tags
password
icon
notion image
🎉NotionNext 🎉
👏欢迎更新体验👏