Rabbitmq-幂等性

幂等性是确保同一操作多次执行结果一致的概念,常用于解决消息重复消费问题。例如,在数据库中通过主键ID和指纹码实现去重,避免在高并发场景下消息重复处理。当消费者接收到消息时,先检查数据库中是否存在相同指纹码,若不存在则执行业务逻辑,存在则忽略。此方法简单但可能面临数据库写入瓶颈,可通过分库分表解决。
摘要由CSDN通过智能技术生成

1. 概念

  • 用户对于同一操作发起的一次请求或者多次请求的结果是一致的,比如在mysql数据当中的乐观锁就可以用来保障幂等性。
  • 在业务高峰期最容易产生消息重复消费问题,比如当消费者消费完消息时,在给生产者返回ack时由于网络中断,导致生产者未收到确认信息,该条消息就会重新发送并被消费者消费,但实际上该消费者已成功消费了该条消息,这就造成了重复消费。而幂等性,即消息不会被多次消费,即使我们收到了很多一样的消息。

2. 解决方案:唯一ID+指纹码

  • 在消费者消费前先去数据库查询这条消息的指纹码标识是否存在,没有就执行insert操作,如果有就代表已经被消费了,就无需任何处理
  • 核心思想:数据库主键id去重
  • 唯一ID:业务表的主键id
  • 指纹码:为了区别每次正常操作的码,每次操作时生成指纹码;可以用时间戳+业务编号或者标志位(具体视业务场景而定)

3. 优劣势

  • 优势:实现简单
  • 劣势:高并发场景下有数据库写入瓶颈(解决方案:根据ID进行分库分表算法路由)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值