RocketMQ 无法避免消息重复,所以如果业务对消费重复非常敏感,务必
要在业务局面去重,有以下几种去重方式
1. 将消息的唯一键,可以是 msgId,也可以是消息内容中的唯一标识字段,例如订单 Id 等,消费前判断是否在
Db 或 Tair(全局 KV 存储)中存在,如果不存在则插入,幵消费,否则跳过。(实际过程要考虑原子性问题,判断
是否存在可以尝试插入,如果报主键冲突,则插入失败,直接跳过)
msgId 一定是全局唯一标识符,但是可能会存在同样的消息有两个不同 msgId 的情况(有多种原因),返种情况可能会使业务上重复消费,建议最好使用消息内容中的唯一标识字段去重。
2. 使用业务局面的状态机去重