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

举报
知识浅谈 发表于 2022/09/22 09:01:37 2022/09/22
【摘要】 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怎么保证消息不被重复消费以及消息的可靠性的浅见,如有问题,请指正学习,希望有所帮助。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。