如何保证RabbitMQ的消息不会丢失?怎么保证RabbitMQ的可靠性?
2024-09-08 14:32:35
- 生产者:
原因:
由于网络原因导致消息发送失败,消息队列没有接收到生产者发送的消息,但生产者认为消息发送成功。
解决办法:
- transaction模式:事务模式:开启事务,发送消息,成功提交事务,失败回滚事务。
- confirm模式:确认模式,不管成功与否,消息队列都给生产者一个成功或失败的回执,然后生产者根据成功或失败做处理。
- 消息队列:
正常:
消息队列接收消息,消费者监听消息并消费。
丢失:
消息队列接收消息,在消费者还没有消费之前就宕机了。这时在消息队列中的消息就丢失了。
解决:
可以对消息进行持久化操作,设置消息为持久化消息,那么持久化的消息会被保存到磁盘中,即使RabbitMQ宕机了。但是在重启
之后的时候依然可以将持久化的消息重新加载到消息队列中。在持久化消息的同时还可以结合生产的confirm模式来使用。
通过这种方式最大程度的解决消息丢失问题
- 消费者:
原因:
消费者之所以会发生消息丢失是因为消费者采用了自动确认消息模式。
丢失:在消费者采用自动确认消息模式时,在接收到消息后,会自动给消息队列发送确认信息,他是不关注这条消息在消费过程中是否
出现问题导致没有成功消费的情况的,这时消息队列已经接收到确认消费回执,并把此消息移除了,这就导致消息丢失,
解决办法:
将自动确认模式改成手动确认消息模式。接收到消息后,只有代码执行成功,消息被真正消费掉了,才发送确认消息如果执行失败就
不发送确认消息信息。
最新文章
- 从零开始学Python第六周:面向对象基础(需修改)
- ToolProvider.getSystemJavaCompiler() Return NULL!
- 20151011 C# 第一篇 运算符
- HDU	5996 dingyeye loves stone ---BestCoder Round #90
- bash脚本编程之二 条件判断and 逻辑运算
- Marvelous Mazes
- Hadoop 安装记录
- CSS里的单位
- OpenGL8-直接分配显存-极速绘制(Opengl1.5版本才有)
- 用端口映射在Apache中对每个项目分配端口,实现一个端口访问一个网站
- Naive Bayes Classification
- Telnet服务器和域名系统的端口号 Mac OS X
- QT---实现小球游戏(零基础入门)
- Java (三、数组)
- iBatis第五章:事务管理
- [Jenkins][git]构建时提示Caused by: hudson.plugins.git.GitException: Command ";/usr/bin/git reset --hard"; returned status code 128:
- c++中的var_dump
- 登录ssh提示:ssh_exchange_identification: read: Connection reset by peer error
- Qt 的事件
- java中的类、对象、方法
热门文章
- sync.Once
- svn ssh方式避免每次输入密码
- 合格できる日本語能力試験, N1.PDF
- Python列表等长度分割
- VM虚拟机15安装Kali Linux2020版详细教程
- vue自定义组件的总结(一)
- zookeeper在关闭服务时报could not find file /opt/module/zookeeper-3.5.10/zkData/zookeeper_server.pid
- EhLib 9安装
- 【Java学习Day07】标识符
- git 问题解决