RabbitMQ面试题

1.同步和异步

同步:是一个顺序执行的过程,下一步的执行是在上一步正确执行完后才能继续。

适用场景:查询(登录:必须有验证码,才能登录)

技术:OpenFeign,RestTemplate

异步:只要消息发送到了Broker,后续服务从Broker获取到消息(如果有多个后续服务在消费消息,顺序是没有要求的)

适用场景:调用方不需要等待后续服务返回结果(注册成功后,收到短信邮件)

技术:MQ,多线程

2.消息可靠性

概述:消息由生产者发送到MQ,最终被消费者正常消费完成。

消息丢失的几种情况:1.生产者连不上MQ   2.生产者发送消息未到达交换机   3.消息到达交换机,没有正确路由到队列 4.MQ宕机,队列中的消息不见了 5.消费者收到消息,还没消费,消费者宕机

如何解决消息丢失问题:

1.生产者:开启重试测率,保证消息正确到达MQ,如果重试次数耗尽,就会写入数据库,后期交给人工处理;开启confirm机制,保证消息正确到达交换机;开启return机制,保证消息正确到达队列。

2.持久化操作:创建交换机,队列,消息是设置持久话,保证MQ宕机后重启不丢失

3.消费者:开启自动ack,并且设置本地重试策略,当本地重试次数耗尽,失败消息由路由到错误队列;监听错误队列,把消息写入数据库,后期交给人工处理。

3.消费者重复消费问题

1.消费者的操作是否是一个幂等性操作?

幂等性概念:多次执行同一个操作,最终结果都是一样的。

(1)天生幂等的操作,一般我们不管:查询和根据条件删除。

(2)非天生幂等操作:1.数据库唯一约束;2.使用Redis来实现:生产者发送消息时,设置消息id;消费者先从Redis中获取消息ID,如果存在,则表示有人在消费消息,我什么都不做。如果不存在,表示是该消息是第一次被消费,正常消费,并且向存储Key为消息ID的数据到Redis,同时设置过期时间。3.业务判断:由一个状态到另一个状态,必须加条件是初始状态。4.MQ可靠性保证并不是100%,所以有可能消费者没有收到MQ的消息,那么后续就无法执行了。我们可以主动发起查询去获取最新结果,然后继续完成后面的业务操作

4.消息消费如何保证顺序消息

1.多个消费者,如何保证消息的顺序消费?

(1)消费者指定线程数为1:(2)MQ增加队列属性为 x-single-active-consumer 为true

表示当前队列只能有一个消费者

5.消息积压问题

1.产生的原因:生产者生产消息的速度 远高于 消费者消费消息的速度?于是就会造成消息积压在MQ

2.可以采取惰性队列:(1)提升消息的存储能力,(2)把消息存储到本地,后面慢慢读取

3.为什么会有消息积压:

      原因:1、首先:消息积压的原因,大部分情况是消费者消费速度 跟不上 生产者生产速度

                  2、这种情况下,我们可以采用惰性队列先将生产的消息存入磁盘,在消费时再加载到                   内存。以此来缓解队列存储消息的压力

                 3、分析积压消息的原因,大概率是消费者出问题了。那么首先先修复消费者代码、启动消费者程序。然后再临时增加消费者程序节点,以倍速的形式去消费积压的消息,当积压的消息被处理的差不多的时候,再把增加的节点下线。

5.死信交换机

1.概念:如果这个包含死信的队列配置了 dead-letter-exchange 属性,指定了一个交换机,那么队列中的死信就会投递到这个交换机中,而这个交换机称为 死信交换机 (Dead Letter Exchange,检查DLX)。

2.成为死信的几种情况:(1)消费者使用basic.reject 或 basic.nack 声明消费失败,并且消息的requeue参数设置为false;(2)消息设置了过期时间,或者消息存放的队列设置了过期时间,超时无人消费;(3)要投递的队列消息满了,无法投递。

3.延迟队列

3.1概念:一种实现 消费者延迟收到消息 的模式。

在RabbitMQ中,没有延迟队列的功能。可以使用 TTL + 死信队列 的方式实现延迟队列

3.2实际应用场景:1.延迟发送短信;2、用户下单,如果用户在15 分钟内未支付,则自动取消订单;3、预约工作会议,20分钟后自动通知所有参会人员

3.3RabbitMQ如何实现延迟队列?(1)死信队列+TTL:由于队列的原因,会先消费队首的消息,如果后续的消息消费的时间比队首的要早,会导致消费无法消费。(2)装一个Delay插件

6.与Kafka的区别

Kafka:优点:吞吐量大

             缺点:功能强大

            特点:1.重Topic:收发消息都必须指定Topic

                       2.拉模式:由消费者主动去Broker中拉取消息

                     3.消息消费完后,不会删除,保留历史消息

RabbitMQ:优点:时效性强,可靠性高

                      缺点:吞吐量比Kafka小

                       特点:1.轻Topic:不同工作模式可以选择是否使用Topic

                                   2.推模式:由Broker主动把消息推送给消费者

                                   3.消息阅后即焚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值