摘要:消息丢失分成三种情况,可能出现生产者消费者。生产者丢失数据生产者丢失数据首先要确保写入的消息别丢,消息队列通过请求确认机制,保证消息的可靠传输。只有消息被持久化到磁盘以后,才会回传消息。
消息丢失分成三种情况,可能出现生产者、RabbitMQ、消费者。
首先要确保写入 RabbitMQ 的消息别丢,消息队列通过请求确认机制,保证消息的可靠传输。生产开启 comfirm 模式,在生产者开启 comfirm 模式之后,每次发送消息都会分配一个唯一的id。
一般在生产者这块避免数据丢失,都是用 confirm 机制的
RabbitMQ 丢失数据,需要开启 RabbitMQ 持久化,开启持久化之后,生产者发送的消息会持久化到磁盘,RabbitMQ 就算是挂了,恢复启动后也会读取之前存储的数据。
还有一种少见的情况,就是RabbitMQ还没将消息持久化,自己就挂了。这种情况需要生产者那边的确认机制结合起来。只有消息被持久化到磁盘以后,才会回传 ack 消息。生产者没有接收到 ack,也可以自己重发。
消费丢失数据,刚消费到 RabbitMQ 发送的数据,消费进程就挂了,重启进程后,RabbitMQ 也不会重新发送消息。
这个时候需要关闭 RabbitMQ 关闭自动的 ack 机制。每次在消费端处理后,再在程序里做 ack 确认,这样的话,如果没有处理完,就没有 ack 确认,那 RabbitMQ 就认为你还没有处理完,这个时候 RabbitMQ 会重新发送消息给消费者。
如果觉得文章对你有帮助的话,请点个推荐吧!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/124131.html
摘要:在全面兼容Apache Kafka生态的基础上,消息队列Kafka彻底解决ApacheKafka稳定性不足的长期痛点,并且支持消息无缝迁移到云上。 近日,阿里云宣布正式推出消息队列Kafka,全面融合开源生态。在全面兼容Apache Kafka生态的基础上,消息队列Kafka还具备了超易用,超高可用可靠性,扩缩容不操心,全方位安全诊断,数据安全有保障的特点。可用行达99.9%,数据可靠行99...
阅读 3321·2021-11-22 12:04
阅读 2703·2019-08-29 13:49
阅读 480·2019-08-26 13:45
阅读 2237·2019-08-26 11:56
阅读 996·2019-08-26 11:43
阅读 585·2019-08-26 10:45
阅读 1265·2019-08-23 16:48
阅读 2154·2019-08-23 16:07