如何保证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镜像队列发生故障转移时. 模拟个测试环境如下: 首先在集群队列中增加两个镜像队列的 ...
随机推荐
- OL3-Cesium 二三维鼠标事件统一处理
like the github issue: https://github.com/openlayers/ol3-cesium/issues/344#issuecomment-214098148 th ...
- SingleFlight
Go 语言扩展包中提供了另一种同步原语,它能够在一个服务中抑制对下游的多次重复请求.一个比较常见的使用场景是:我们在使用 Redis 对数据库中的数据进行缓存,发生缓存击穿时,大量的流量都会打到数据库 ...
- mybatis-plus主键生成策略(实体类配置,数据库插入数据自动生成id)
转载:MyBatisplus -- ActiveRecord(AR)_mybatisplus idtype.auto_憨憨浩浩的博客-CSDN博客 0.auto:自动增长(mysql,sql serv ...
- Nginx/1.13.3热升级1.21.6
背景: 根据其服务器响应标头,安装的 nginx 版本为低于 1.16.1 的 1.9.5,或是低于 1.17.3 的 1.17.x.因此,它受到多种拒绝服务漏洞的影响: - HTTP/2 协议堆栈中 ...
- robots.txt 文件说明
robots其实就是指Robots协议,Robots协议(也称为爬虫协议.机器人协议等)的全称是"网络爬虫排除标准"(Robots Exclusion Protocol),网站通过 ...
- 阿里云centos7安装图形界面gnome
这应该是很无聊很蛇精的操作吧. 首先命令行远程登陆阿里云,然后root身份更新系统,安装gnome这些操作(菜如我以前都没有操作过),参照网上虚拟机的教程. # yum update -y # yum ...
- 全国IP段列表
http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest Linux下执行如下命令可将中国大陆ip格式化并导出 wget -c htt ...
- python学习:窗口程序
https://www.cnblogs.com/zyg123/p/10385456.html # 导入tkinter模块 import tkinter # 创建画布需要的库 from matplotl ...
- DataTable操作汇总
1.排序 DataTable dt = new DataTable(); dt.Columns.Add("Name"); dt.Columns.Add("Age" ...
- 91、mysql批量删除表
## 存储过程实现 drop PROCEDURE if EXISTS rush; create PROCEDURE rush() BEGIN ## 创建临时表,插入快照数据 drop table if ...