如何处理消息队列消费过程中的重复消息&如何实现幂等性
Posted freeoldman
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何处理消息队列消费过程中的重复消息&如何实现幂等性相关的知识,希望对你有一定的参考价值。
什么是幂等
幂等本来是数学上的概念,它的定义是这样的: 如果一个函数 f(x) 满足:f(f(x)) = f(x),则函数 f(x) 满足幂等性。
在计算机领域用来描述一个操作、方法或者服务。一个幂等操作的特点是,其任意多次执行所产生的影响均与一次执行的影响相同。
场景
将林志玲账户的余额加 100 元
方法一:利用数据库的唯一约束实现幂等
我们在数据库中建一张转账流水表,这个表有三个字段:转账单 ID、账户 ID 和变更金额,然后给转账单 ID 和账户 ID 这两个字段联合起来创建一个唯一约束,这样对于相同的转账单 ID 和账户 ID,表里至多只能存在一条记录。
方法二:为更新的数据设置前置条件(将方法实现幂等)
- 方法入参传入林志玲的账户余额,拿参数中的余额与数据库中的余额做比较如果相同则执行变更操作。
- 最简单的做法给数据增加一个版本号属性,每次更改数据前,比较当前数据的版本号是否和消息中的版本一致,如果不一致就拒绝更新数据,更新数据的同时将版本号+1。(和乐观锁原理一样)
方法三: 令牌机制 (记录并检查操作)
在发送消息时,给每条消息指定一个全局唯一的ID,消费时,先根据这个ID检查这条消息是否有被消费过,如果没有消费过更新数据,然后将消费状态置为已消费。 (先向服务器请求token,再拿着这个token请求服务器,服务器对比这个token是否存在存在正常调用,不存在忽略这个请求,调用成功删除服务器存储的这个token)
**** 码字不易如果对你有帮助请给个关注****
**** 爱技术爱生活 QQ群: 894109590****
以上是关于如何处理消息队列消费过程中的重复消息&如何实现幂等性的主要内容,如果未能解决你的问题,请参考以下文章