目录
在分布式系统中,幂等性是指对同一操作的多次执行所产生的影响与一次执行的影响相同。对于消息队列来说,保证消息的幂等性意味着即使同一条消息被多次消费,也不会对业务逻辑产生额外的影响。
RocketMQ 本身并不直接提供消息幂等性的实现,而是通过一些设计模式和最佳实践,帮助开发者在业务层面实现消息的幂等性。以下是 RocketMQ 中保证消息幂等性的常见方法:
1. 消息幂等性的必要性
-
消息重复的原因:
-
生产者重试:生产者发送消息后未收到 Broker 的确认响应,可能会重试发送。
-
消费者重试:消费者消费消息后未及时提交消费位点(Offset),Broker 可能会重新投递消息。
-
网络抖动:网络问题可能导致消息重复投递。
-
-
幂等性的重要性:
-
避免重复消费导致业务逻辑错误(如重复扣款、重复下单等)。
-
确保系统的数据一致性和可靠性。
-
2. RocketMQ 中实现消息幂等性的方法
2.1 唯一消息 ID
-
每条消息都有一个唯一的消息 ID(
msgId),由 RocketMQ 自动生成。 -
生产者可以在发送消息时,为消息设置一个业务唯一的 Key(
keys),用于标识消息。 -
消费者可以通过消息 ID 或业务 Key 来判断消息是否已经处理过。
2.2 业务唯一标识
-
在消息体中包含一个业务唯一标识(如订单 ID、交易流水号等)。
-
消费者在处理消息时,先检查该业务唯一标识是否已经处理过。
-
如果已经处理过,则直接跳过;否则,执行业务逻辑。
2.3 幂等表
-
在业务数据库中维护一张幂等表,记录已经处理过的消息的唯一标识。
-
消费者在处理消息时,先查询幂等表,判断消息是否已经处理过。
-
如果消息已经处理过,则直接跳过;否则,执行业务逻辑并插入记录。


1358

被折叠的 条评论
为什么被折叠?



