Rabbitmq-幂等性

1. 概念

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

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

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

3. 优劣势

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

你可能感兴趣的:(rabbitmq,rabbitmq)