type
status
category
date
slug
summary
tags
password
icon
消息幂等:执行n次的最终结果都一样
📝 主旨内容
为什么会多次执行?(问题场景)上游颁发一个唯一id比如说订单号
重试机制,上游投递消息的时候,如果超时了,就会一直重试,其实超时可能这个消息真是投递过来了对吧,这个消息队列就接收到了很多一样的消息对吧,就导致下游消费者可能消费到了很多一样的数据了。
解决方案:
redis分布式锁做校验(第一个性能好,第二个防止同时有很多消息过来)
一般前两步是放在本地事务当中的
第一步先校验(插入记录表),如果是第一次,没有数据那么就直接插入进来了。
第二步执行业务逻辑(订单发货,扣减库存都可以)
第三步手动ack(确认消费成功)
如果下次还有同样的订单id进来了,就会插入失败,因为已经记录了。也就不会执行之后的业务逻辑了。
redis分布式锁做校验原理
分布式环境当中只有一个线程可以获取到锁
set nx
set if not exist(不存在就赋值)
mysql可以使用唯一索引来实现锁
为什么要使用redis实现锁
效率高,基于内存
- 作者:Guxi8086
- 链接:https://Guxi8086.com/article/1-31
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章
