3

RabbitMQ怎么保证消息不被重复消费以及消息的可靠性

 1 year ago
source link: https://blog.51cto.com/u_13794952/5702003
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

RabbitMQ怎么保证消息不被重复消费以及消息的可靠性

精选 原创

知识浅谈 2022-09-22 09:06:58 博主文章分类:后端技术栈 ©著作权

文章标签 消息队列 redis 发送消息 文章分类 Java 编程语言 yyds干货盘点 阅读数179

RabbitMQ怎么保证消息不被重复消费以及消息的可靠性_消息队列

🍁 作者:知识浅谈,CSDN博客专家,阿里云签约博主,InfoQ签约博主,华为云云享专家
📌 擅长领域:全栈工程师、爬虫、ACM算法
💒 公众号:知识浅谈

RabbitMQ怎么保证消息不被重复消费以及消息的可靠性总结
🤞这次都给他拿下🤞

正菜来了⛳⛳⛳

🎈RabbitMQ怎么保证消息不被重复消费

1️⃣:消息队列发送ACK消息到生产者过程出现的问题
开启ACK确认机制后,发送方发送消息之后,消息队列发送ACK确认的时候,如果由于网络波动造成ACK消息丢失,发送方重复发送造成的消息重复。

解决方法:使用定时任务+Redis,发送之后如果没有收到ACK,定时重发,在消息队列处,使用redis记录收到的消息,如果收到redis存在的消息,说明之前已经收到过,便直接返回ACK。

2️⃣:消费者发送ACK消息到消息队列的过程中出现的问题
消息队列发送消息到消费者之后,消费之后,消费者返回ACK给消息队列,如果ACK由于网络的问题没有收到,消息队列会再次发送消息给消费者,如果此前已经消费过该消息,则为了防止消息的重复消费,保证幂等性,有两种解决方案。

  1. 消息中携带全局唯一的id,当消息重复发送时,检查该全局唯一id是否存在于数据库中。
  2. 使用redis记录已经消费的消息,当消息消费之后使用redis记录,当重复消费的时候直接返回ACK即可。

🎈RabbitMQ怎么保证消息的可靠性

🍮消息的持久化保证

消息队列开启消息的持久化机制
channel.queueDeclare(“queue.persistent.name”, true, false, false, null);
第二个参数true,表示durable=true;

🍮ACK确认机制保证

  1. 发送者发送消息之后,消息队列发送ACK确认。
  2. 消息队列发送消息之后,消费者发送ACK确认。

🍮开启消息重试机制

当消息发送之后没有被正常消费,发送方在一定的事件后重发消息,因为有可能上一次发送的时候,由于网络波动,发送失败。

🍮开启死信队列

当重复消息发送之后仍不能正常消费,把消息发送到死信队列,对于消费失败的消息进行人工干预。

以上就是关于个人对RabbitMQ怎么保证消息不被重复消费以及消息的可靠性的浅见,如有问题,请指正学习,希望有所帮助。

  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK