如何保证RabbitMQ的消息不会丢失?怎么保证RabbitMQ的可靠性?
- 生产者:
原因:
由于网络原因导致消息发送失败,消息队列没有接收到生产者发送的消息,但生产者认为消息发送成功。
解决办法:
- transaction模式:事务模式:开启事务,发送消息,成功提交事务,失败回滚事务。
- confirm模式:确认模式,不管成功与否,消息队列都给生产者一个成功或失败的回执,然后生产者根据成功或失败做处理。
- 消息队列:
正常:
消息队列接收消息,消费者监听消息并消费。
丢失:
消息队列接收消息,在消费者还没有消费之前就宕机了。这时在消息队列中的消息就丢失了。
解决:
可以对消息进行持久化操作,设置消息为持久化消息,那么持久化的消息会被保存到磁盘中,即使RabbitMQ宕机了。但是在重启
之后的时候依然可以将持久化的消息重新加载到消息队列中。在持久化消息的同时还可以结合生产的confirm模式来使用。
通过这种方式最大程度的解决消息丢失问题
- 消费者:
原因:
消费者之所以会发生消息丢失是因为消费者采用了自动确认消息模式。
丢失:在消费者采用自动确认消息模式时,在接收到消息后,会自动给消息队列发送确认信息,他是不关注这条消息在消费过程中是否
出现问题导致没有成功消费的情况的,这时消息队列已经接收到确认消费回执,并把此消息移除了,这就导致消息丢失,
解决办法:
将自动确认模式改成手动确认消息模式。接收到消息后,只有代码执行成功,消息被真正消费掉了,才发送确认消息如果执行失败就
不发送确认消息信息。

如何保证RabbitMQ的消息不会丢失?怎么保证RabbitMQ的可靠性?的更多相关文章
- rabbitmq学习(二):rabbitmq(消息队列)的作用以及rabbitmq之直连交换机
前言 上篇介绍了AMQP的基本概念,组成及其与rabbitmq的关系.了解了这些东西后,下面我们开始学习rabbitmq(消息队列)的作用以及用java代码和rabbitmq通讯进行消息发布和接收.因 ...
- RabbitMq如何确保消息不丢失
上篇写了掌握Rabbitmq几个重要概念,从一条消息说起,这篇来总结关于消息丢失让人头痛的事情.网络故障.服务器重启.硬盘损坏等都会导致消息的丢失.消息从生产到消费主要结果以下几个阶段如下图. ①生产 ...
- 四种途径提高RabbitMQ传输消息数据的可靠性(一)
前言 RabbitMQ虽然有对队列及消息等的一些持久化设置,但其实光光只是这一个是不能够保障数据的可靠性的,下面我们提出这样的质疑: (1)RabbitMQ生产者是不知道自己发布的消息是否已经正确达到 ...
- 如何保证RabbitMQ的消息不丢失及其背后的原理
一.消息为什么丢失 RabbitMQ默认情况下的交换机和队列以及消息是非持久化的,也就是说在服务器重启或者宕机恢复后,之前创建的交换机和队列都将不复存在,之前未消费的消息也就消失不见了.原因在于每个队 ...
- RabbitMQ防止消息丢失
转载请注明出处 0.目录 RabbitMQ-从基础到实战(1)— Hello RabbitMQ RabbitMQ-从基础到实战(3)— 消息的交换 1.简介 RabbitMQ中,消息丢失可以简单的分为 ...
- RabbitMQ如何保证发送端消息的可靠投递
消息发布者向RabbitMQ进行消息投递时默认情况下是不返回发布者该条消息在broker中的状态的,也就是说发布者不知道这条消息是否真的抵达RabbitMQ的broker之上,也因此会发生消息丢失的情 ...
- RabbitMQ使用教程(三)如何保证消息99.99%被发送成功?
1. 前情回顾 RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例 RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置 在以上两篇博客发布后 ...
- RabbitMQ使用教程(五)如何保证队列里的消息99.99%被消费?
1. 前情回顾 RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例 RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置 RabbitMQ使用 ...
- RabbitMQ:消息丢失 | 消息重复 | 消息积压的原因+解决方案+网上学不到的使用心得
前言 首先说一点,企业中最常用的实际上既不是RocketMQ,也不是Kafka,而是RabbitMQ. RocketMQ很强大,但主要是阿里推广自己的云产品而开源出来的一款消息队列,其实中小企业用Ro ...
- RabbitMQ如何保证发送端消息的可靠投递-发生镜像队列发生故障转移时
上一篇最后提到了mandatory这个参数,对于设置mandatory参数个人感觉还是很重要的,尤其在RabbitMQ镜像队列发生故障转移时. 模拟个测试环境如下: 首先在集群队列中增加两个镜像队列的 ...
随机推荐
- Axure的认识与使用
[软件介绍] Axure RP 是一款产品经理必备的交互式快速产品原型设计制作工具,能够高效率的制作产品原型,快速绘制线框图.流程图.网站架构图.示意图.HTML 模版等. [工具使用] 1.环境与画 ...
- <string> <cstring> <string.h>
<string>是C++标准库头文件,包含了拟容器class std::string的声明(不过class string事实上只是basic_string<char>的type ...
- 《这里分别闭合离合器Zm和Z2会分别有什么效果》 回复
<这里分别闭合离合器Zm和Z2会分别有什么效果> https://tieba.baidu.com/p/8246021959 .
- 基2和基4FFT
1.1 FFT的必要索引变换 基2算法需要位顺序的反转位逆序,而基4算法需要首先构成一个2位的数字,再反转这些数字,称为数字逆序. 1.1 位逆序和数字逆序 1.2 FFT的复数乘法转实数乘法 \[X ...
- linux网卡配置模板(Rocky)
动态获取: tips: sudo nmcli con: 查询网卡UUID TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp ...
- jdbc封装工具类(无连接池)
package com.huang; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepar ...
- vscode远程连接服务器出现Bad owner or permissions on .ssh/config
vscode远程连接服务器出现Bad owner or permissions on C:\\Users\USER\.ssh/config 过程试图写入的管道不存在, 原因是vscode的remoto ...
- 百度地图的API接口
API接口 API:应用程序接口(API:Application Program Interface) python 为了在团队内部形成共识.防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好 ...
- webrtc windows编译记录
//cmd set path=D:\zzh\depot_tools;%path% set DEPOT_TOOLS_WIN_TOOLCHAIN 0 set vs2022_install=C:\Progr ...
- NVIDIA的GPU算力Compute Capalibity
可查看官方查询地址:https://developer.nvidia.com/cuda-gpus