RabbitMQ的幂等性问题

首先明确什么叫幂等性

幂等性:用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生副作用。

MQ中的消息会产生重复性消费的问题:消费者消费之后会返回ack给MQ,但是此时如果网络不好,故MQ未收到确认消息,该条消息会发给其他消费者或者网络好了之后再次发送给该消费者,但实际上这条消息已经被消费过了。这就是消费者消费重复的消息。

对于消费端幂等性保障的解决方案

  1. 唯一Id+指纹码机制

    指纹码:利用一些规则或者时间戳拼接生成而来,但是一定要保证唯一性,查询他是否存在于数据库中。优势就是:简单。劣势:单个数据库会有写入性能瓶颈。

  2. Redis原子性

    利用Redis执行setnx命令,天然具有幂等性。从而实现不重复消费。

上一篇:RabbitMq的部署(单机版和集群版)


下一篇:《RabbitMQ 实战指南》第二章 RabbitMQ 入门