rabbitmq之确保消息不丢失】的更多相关文章

1.背景引入 在使用消息中间件(rabbitmq)时,令开发者最头痛的就是防止消息丢失问题,而消息丢失可能发生的位置主要为三种,分别为(1)消息发送到MQ中消费者消费未成功时突然宕机:(2)消息发送到MQ中MQ集群整体宕机:(3)消息发送到队列但未持久化到磁盘前MQ集群整体宕机 2.解决消息发送到MQ中消费者消费未成功时宕机问题 对于稍微了解RabbitMQ的开发者而言一定会知道RabbitMQ中ack消息确认机制,默认情况下只要消息从队列中发送到消费者,队列就会将消息删除,此时将会出现以上所说…
RabbitMQ一般情况很少丢失,但是不能排除意外,为了保证我们自己系统高可用,我们必须作出更好完善措施,保证系统的稳定性. 下面来介绍下,如何保证消息的绝对不丢失的问题,下面分享的绝对干货,都是在知名互联网产品的产线中使用. 1.消息持久化 2.ACK确认机制 3.设置集群镜像模式 4.消息补偿机制 第一种:消息持久化 RabbitMQ 的消息默认存放在内存上面,如果不特别声明设置,消息不会持久化保存到硬盘上面的,如果节点重启或者意外crash掉,消息就会丢失. 所以就要对消息进行持久化处理.…
一.消息为什么丢失 RabbitMQ默认情况下的交换机和队列以及消息是非持久化的,也就是说在服务器重启或者宕机恢复后,之前创建的交换机和队列都将不复存在,之前未消费的消息也就消失不见了.原因在于每个队列和交换机的durable属性.该属性默认情况是false,它决定了RabbitMQ是否需要在崩溃或者重启之后重新创建队列(或者交换机). 二.持久化交换机和队列 将交换机和队列的durable属性设置为true,这样你就不需要在服务器断电后重新创建队列和交换机了.你也许会认为把队列和交换机的dur…
上篇写了掌握Rabbitmq几个重要概念,从一条消息说起,这篇来总结关于消息丢失让人头痛的事情.网络故障.服务器重启.硬盘损坏等都会导致消息的丢失.消息从生产到消费主要结果以下几个阶段如下图. ①生产阶段,生产者创建消息,经过网络发送到rabbit服务器 ②消息存储阶段,首先被发送到交换器然后经过路由算法,到达队列,等待被拉取消费 ③消费阶段,消费者经过网络从rabbit服务器拉取消息进行消费 这三个阶段都有可能消息丢失,下面一一分析. 消息存储阶段 正常情况下,我们使用BasicPublish…
本文只针对springboot整合rabbitmq的消息防丢失,话不多说,上干货.... 设置发送mq消息不丢失实现思路 执行的方案: 第一步,要对队列,消息以及交换机进行持久化操作(保存到物理磁盘中) 因为mq消息默认是保存在内存中 交换机我们在声明的时候可以进行持久化 @Bean(EX_BUYING_ADDPOINTUSER) public Exchange EX_BUYING_ADDPOINTUSER(){ return ExchangeBuilder.directExchange(EX_…
目录 生产者丢失消息 代码模拟 事务 confirm模式确实 数据退回监听 MQ事务相关软文推荐 MQ丢失信息 消费者丢失信息 之前我们简单介绍了rabbitmq的功能.他的作用就是方便我们的消息解耦.紧接着问题就会暴露出来.解耦就设计到双方系统不稳定问题.在mq中有生产者.mq.消费者三个角色.其中一个角色down机或者重启后.就设计到消息的丢失问题. 因为MQ整个消息周期设计到上述的三个角色,所以我们从这个三个角色开始讨论丢失数据的情况.并如何解决 生产者丢失消息 在生产数据程序中,消息已经…
1. 什么是消息队列 生活里的消息队列,如同邮局的邮箱, 如果没邮箱的话, 邮件必须找到邮件那个人,递给他,才玩完成,那这个任务会处理的很麻烦,很慢,效率很低 但是如果有了邮箱, 邮件直接丢给邮箱,用户只需要去邮箱里面去找,有没有邮件,有就拿走,没有就下次再来,这样可以极大的提升邮件收发效率! rabbitmq是一个消息代理,它接收和转发消息,可以理解为是生活的邮局.你可以将邮件放在邮箱里,你可以确定有邮递员会发送邮件给收件人. 概括:rabbitmq是接收,存储,转发数据的. 官方教程:htt…
http://blog.csdn.net/zhu_tianwei/article/details/53971296 下面主要从队列.消息发送.消息接收方面了解消息传递过的一些可靠性处理. 1.队列 消费者是无法订阅或者获取不存在的MessageQueue中信息.消息被Exchange接受以后,如果没有匹配的Queue,则会被丢弃. 声明一个队列 channel.queueDeclare(queue, durable, exclusive, autoDelete, arguments) durab…
1. 本篇概要 RabbitMQ针对这个问题,提供了以下几个机制来解决: 生产者确认 持久化 手动Ack 本篇博客我们先讲解下生产者确认机制,剩余的机制后续单独写博客进行讲解. 2. 生产者确认 要想保证消息不丢失,首先我们得保证生产者能成功的将消息发送到RabbitMQ服务器. 但在之前的示例中,当生产者将消息发送出去之后,消息到底有没有正确地到达服务器呢?如果不进行特殊配置,默认情况下发送消息的操作是不会返回任何消息给生产者的,也就是默认情况下生产者是不知道消息有没有正确的到达服务器. 从b…
1.mq原则 数据不能多,也不能少,不能多是说消息不能重复消费,这个我们上一节已解决:不能少,就是说不能丢失数据.如果mq传递的是非常核心的消息,支撑核心的业务,那么这种场景是一定不能丢失数据的. 2.丢失数据场景 丢数据一般分为两种,一种是mq把消息丢了,一种就是消费时将消息丢了.下面从rabbitmq和kafka分别说一下,丢失数据的场景, (1)rabbitmq A:生产者弄丢了数据 生产者将数据发送到rabbitmq的时候,可能在传输过程中因为网络等问题而将数据弄丢了. B:rabbit…