RabbitMQ如何保证有序消费消息?如何防止消息被重复消费?

目录

有序消费消息

防止消息被重复消费


 

有序消费消息

 

造成消息乱序消费的原因有两种 

情况一:

RabbitMQ如何保证有序消费消息?如何防止消息被重复消费?_第1张图片

情况二

RabbitMQ如何保证有序消费消息?如何防止消息被重复消费?_第2张图片

 

如何保证消息有序被消费

情况一:

RabbitMQ如何保证有序消费消息?如何防止消息被重复消费?_第3张图片

情况二:

RabbitMQ如何保证有序消费消息?如何防止消息被重复消费?_第4张图片

 

 

防止消息被重复消费

 

消息被重复消费的原因

造成消费被重复消费的原因来源于我们之前为了防止消息在消费者端丢失,采用的手动回复MQ的解决方案。如果消费者处理消息成功,手动向MQ回复消息时,网络不稳定,无法回复MQ消费完毕。此时MQ因为收不到消费者的回复而仍然把这条消息保存到MQ中,并重发这条消息到消费者处,此时消费者就收到了2条一毛一样的消息了。

 

如何防止消息被重复消费

我们引入“幂等性”这一概念。幂等性指的是同一操作执行多次,结果不改变,就算重复消费也没问题,因为不会做重复处理。常借助Redis存储消息id,因为redis是单线程缓存数据库,并且提供了很多原子性的操作。我们就可以使用redis中的setnx命令存储消息id。当消费者收到MQ发过的消息并检测到有重复的消息id时,不对重复的消息id进行处理,就直接返回给消费者本条消息已消费。

 

你可能感兴趣的:([RabbitMQ])