【RabbitMQ】如何保证消息队列的可靠性传输

前言

我们在使用到消息队列的时候,肯定要考虑到消息队列的可靠性传输,不然的话,消息传输到一半的话消息没了,那这不是完犊子吗!所以我们必须确保消息在传输的时候不会丢失。那么面试被问到我们该怎么回答呢?

首先

我们先得明白我们要在什么地方做文章才能保证消息的可靠性,然后在细讲每一个地方该干嘛。我们先看一下整体的一个方法,如下图:
在这里插入图片描述
我们知道RabbitMQ的工作过程是生产者生产消息然后将消息放在MQ队列里进而消费者在队列里拉取消息消费。因此我们可以画出下面这张图便于我们接下来的理解。
在这里插入图片描述

第一步:生产者开启confirm模式

我们首先来看生产者这边该怎么去采取措施呢? 我们上面有看到应该是要开启一下confirm模式,其实很简单就是说消费者发送一条消息当这条消息发送到MQ时,MQ需要发一个confirm的确认消息,告诉消费者已经收到这条消息了,否则的话就是没有收到消息需要重新发送消息。如下图:
在这里插入图片描述

第二步:RabbitMQ 开启持久化

我们知道RabbitMQ中的消息是发给交换机然后交换机发给队列中,那么队列中的消息又存在于内存中,假如RabbitMQ崩了,系统重启内存中的数据就没有,消息也会不在,因此我们需要对RabbitMQ中的消息持久化到磁盘中,这样我们重启的时候就可以重新在磁盘中读取消息了。因此我们需要对交换机、队列和消息都做一个持久化处理
在这里插入图片描述

第三步:取消RabbitMQ的自动ACK

那么我们知道在做完上一步的持久化之后就确保这些信息已经是在MQ里了,那么就剩下发送给消费者了,这其实也是会出现问题的,就好比MQ把消息发送出去之后马上就会把这个消息给删除,这一过程就是自动ACK,但是好巧不巧的是消息半路丢了或者消费端崩了,消息并没有真正被消费者拿到,这个时候因为这个自动ACK了所以现在MQ里也没有了这个消息,因此就导致了消息的丢失。所以我们需要关闭自动ACK改成手动ACK,就当消费者拿到之后再告诉MQ已经收到消息了,这一步有点像生产者的confirm模式。
在这里插入图片描述

结语

好了,经过上面的三步设置之后那么就可以保证消息传输的可靠性了,此篇博客主要是为了面试,日后有时间必定会把实际的操作代码补上。
好了,收工~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聪明不喝牛奶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值