如何避免消息重复消费

幂等性也就是相同条件下对一个业务的操作,不管操作多少次,结果都是一样。

如何保证幂等性?

解决思路是:保证消息的唯一性,就算是多次传输,不要让消息的多次消费带来影响;保证消息的 幂等性

消费者怎么解决重复消费问题呢?这里提供两种方法:

状态判断法:消费者消费数据后把消费数据记录在 redis 中,下次消费时先到 redis 中查看是否存在该消息,存在则表示消息已经消费过,直接丢弃消息。 业务判断法:通常数据消费后都需要插入到数据库中,使用数据库的唯一性约束防止重复消费。每次消费直接尝试插入数据,如果提示唯一性字段重复, 则直接丢失消息。一般都是通过这个业务判断的方法就可以简单高效地避免消息的重复处理了。

状态判断法:消费者消费数据后把消费数据记录在 redis 中,下次消费时先到 redis 中查看是否存在该消息,存在则表示消息已经消费过,直接丢弃消息。 业务判断法:通常数据消费后都需要插入到数据库中,使用数据库的唯一性约束防止重复消费。每次消费直接尝试插入数据,如果提示唯一性字段重复, 则直接丢失消息。一般都是通过这个业务判断的方法就可以简单高效地避免消息的重复处理了。

经验分享 程序员 微信小程序 职场和发展