一线大厂面试真题——如何保证RabbitMQ的消息可靠传输

目录

问题解答

面试点评


蜗牛学苑-重构IT职业教育新生态

问题解答

首先,在RabbitMQ的整个消息传递过程中,有三种情况会存在丢失

    1、生产者把消息发送到RabbitMQ Server的过程中丢失

    2、RabbitMQ Server收到消息后在持久化之前宕机导致数据丢失

    3、消费端收到消息还没来得及处理宕机,导致RabbitMQ Server认为这个消息已签

所以,需要从这三个纬度去保证消息的可靠性传输就行了。

1、从生产者发送消息的角度来说,RabbitMQ提供了一个Confirm(消息确认)机制,生产者发送消息Server端以后,如果消息处理成功,Server端会返回一个ack消息。客户端可以根据消息的处理结果来决定是否要做消息的重新发送,从而确保消息一定到RabbitMQ Server上。

2、RabbitMQ Server端来说,可以开启消息的持久化机制,也就是收到消息之后持久化到磁盘里面。

设置消息的持久化有两个步骤。

    a.创建Queue的时候设置为持久化

    b.发送消息的时候,把消息投递模式设置为持久化投递

不过虽然设置了持久化消息,但是有可能会出现,消息刷新到磁盘之前,RabbitMQ Server宕机导致消息丢失的问题。

所以为了确保万一失,需要结合Confirm消息确认机制一起使用。

3、从消费端的角度来说,我们可以把消息的自动确认机制修改成手动确认,也就是说消费端只有手动调用消息确认方法才表示消息已经被签收。

这种方式可能会造成重复消费问题,所以这里需要考虑到幂等性的设计。

面试点

保证消息的可靠性问题,不管是kafka、rocketmq、rabbitmq。

解决方法都是差不多的,而且这些消息中间件一定会提供对应的解决办法

这个问题只是考察求者对于MQ使用上的一些理解,考察不深,但是也是一个比较常见的问题

蜗牛学苑-重构IT职业教育新生态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值