美文网首页
RabbitMQ高级特性--幂等性概念

RabbitMQ高级特性--幂等性概念

作者: 叫我胖虎大人 | 来源:发表于2019-08-18 09:36 被阅读0次

幂等性是什么

我们可以借鉴数据库的乐观锁机制,比如执行一条更新库存的SQL.
update T_REPS set count = count - 1,version = version + 1 where version = 1
同一个操作不论执行多少次,结果都是相同的.


消息幂等性保障

在海量订单产生的业务高峰期,如何避免消息的重复消费问题

  • 消费端实现幂等性,就意味着,我们的消息永远不会消费多次,即使收到了多条一样的消息

唯一ID+指纹码

  • 唯一ID+指纹码(外部或者是内部业务规则 生成的唯一ID)机制,利用数据库主键去重
    指纹码:可能是业务规则,时间戳+具体银行范围的唯一信息码,能保障这次操作的绝对唯一
    select count(1) from t_order where id = '唯一ID+指纹码'
    如果查询返回的结果是1,则说明已经操作了,不需要再次操作.

    • 优点:实现简单
    • 缺点:高并发的情况下有数据库写入的性能瓶颈
    • 解决方案:根据ID分库分表进行算法路由
      但是在分库分表的时候,相同的ID还是会进入同一个数据库(比如Hash算法)

利用Redis原子性实现

(键值无法重复存储),MySQL和redis支持事务,但是两者的事务不同,不能完全保证数据的一致性

  • 通过setnx等命令

SET 订单号 时间戳 过期时间

SET 1893505609317740 1466849127 EX 300 NX
利用Redis进行幂等,需要考虑的问题:

  • 如果要进行数据落库,关键解决的问题是数据库和缓存如何做到数据一致性。
  • 如果不落库,那么都存在缓存中,如何设置定时同步的策略(同步是指将数据存储到数据库中,不落库指的是暂时不落库,不可能永远不落库)

参考课程:https://coding.imooc.com/class/262.html

相关文章

网友评论

      本文标题:RabbitMQ高级特性--幂等性概念

      本文链接:https://www.haomeiwen.com/subject/vazlsctx.html