中间件方案

RocketMQ 保证消息幂等

2021-06-26  本文已影响0人  markeNick

消费重复的场景:

以上来源阿里云:https://help.aliyun.com/document_detail/44397.html

这里提供一种使用Redis的解决思路:在发送消息的时候可以生成一个唯一标识号,例如订单号,然后消费成功后将该标识号存入缓存或者插入数据库,然后每次消费的时候都去检查是否有该条记录

示意图:

RocketMQ解决消息幂等思路-1624689482661.png

因为不同的Message ID对应的消息内容可能相同,有可能出现冲突(重复)的情况,所以真正安全的幂等处理,不建议以Message ID作为处理依据

实际上幂等怎么做是需要根据业务来决定的,有一些业务需要入库的,那么可以利用数据库,一些是需要判断状态的等等,但关键还是在于唯一标识。

一些常见解决思路:

不论怎样,请牢记一个原则:缓存是不可靠的,查询是不可靠的
在高并发的场景下,一定要通过持久化存储的唯一索引以及引入锁机制作为共同保障数据准确性和完整性的最后一道防线

上一篇 下一篇

猜你喜欢

热点阅读