定义
执行n次后最终的结果都一样
为什么会执行多次?
生产者 -> 消息队列(超时重试,会产生多个消息)
解决方案
上游颁发的唯一id,如,订单号进行校验
消费者:
1. 使用redis分布式锁,对上游颁发的唯一id做校验(redis分布式锁:性能高、防止同时有很多消息过来)
2. 执行业务逻辑:如,订单发货、扣减库存等
3. 手动ack:确认消费成功
分布式锁的实现原理:
1. redis:setnx(set if not exist)
2. mysql:唯一索引
3. zk:临时顺序节点
为什么使用redis做分布式
1. 效率高:基于内存
2. redisson框架出来的早,功能相对完善