RabbitMQ面试题

1:什么是RabbitMQ

RabbitMQ是Erlang语言开发的基于AMQP的一款的消息中间件,核心思想是生产者不会将消息直接发送给队列,消息在发给客户端时会先发给交换机,然后再有交换机发送给对应的队列。对路由,负载均衡,数据持久化都有很好的支持

2:消息队列的作用于使用场景

异步:批量数据异常处理(批量上传文件)

削峰:高负载任务负载均衡(电商秒杀抢购)

解耦:串行任务并行化(退货流程解耦)

广播:基于Pub/Sub实现一对多通信

3:为什么使用MQ?MQ的有点

异步处理-相对比较传统的串行,并行方式,提高系统吞吐量

应用解耦-系统间通过消息通信,不用关心其他系统的处理

流量削锋 - 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请求。

日志处理 - 解决大量日志传输。

消息通讯 - 消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现		 点对点消息队列,或者聊天室等

主要是:解耦、异步、削峰

4:RabbitMQ使用场景

服务间异步通信

顺序消费

定时任务

请求削峰

5:RabbitMQ的工作模式(5种)

1:简单模式:

	消息产生消息,将消息放入队列

	消息的消费者(consumer) 监听 消息队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列中删除	(隐患 消息可能没有被消费者正确处理,已经从队列中消失了,造成消息的丢失,这里可以设置成手动的ack,但如果设置成手动ack,处理完后要及时发送ack消息给队列,否则会造成内存溢出)

2:工作模式:

	一个生产者,一个队列,多个消费者,队列可以被多个消费者监听,但是生产者将消息发给队列之后,还是只能有一个消费者接收到消息

3:后边三种都叫订阅模型,这三种里边引入了交换机的概念,具体的区分是根据交换机的类型区分的,在这三种模式种,生产者把消息发送给交换机,交换机不负责存储消息,由交换机发送给指定的队列,消费者监听队列消费消息

6:如何确保消息不丢失?

消息持久化,当然前提是队列必须持久化

RabbitMQ 确保持久性消息能从服务器重启中恢复的方式是,将它们写入磁盘上的一个持久化日志文件,当发布一条持久性消息到持久交换器上时,Rabbit 会在消息提交到日志文件后才发送响应。一旦消费者从持久队列中消费了一条持久化消息,RabbitMQ 会在持久化日志中把这条消息标记为等待垃圾收集。如果持久化消息在被消费之前 RabbitMQ 重启,那么 Rabbit 会自动重建交换器和队列(以及绑定),并重新发布持久化日志文件中的消息到合适的队列。

7:RabbitMQ 中的 broker 是指什么?cluster 又是指什么?

broker 是指一个或多个 erlang node 的逻辑分组,且 node 上运行着 RabbitMQ 应用程序。cluster 是在 broker 的基础之上,增加了 node 之间共享元数据的约束

8:消息基于什么传输?

由于TCP连接的创建和销毁开销较大,且并发数受系统资源限制,会造成性能瓶颈。RabbitMQ使用信道的方式来传输数据。信道是建立在真实的TCP连接内的虚拟连接,且每条TCP连接上的信道数量没有限制

9:无法被路由的消息去哪了?

无设置的情况下,无法路由(Routing key错误)的消息会被直接丢弃

解决方案:

将mandatory设置为true,并配合ReturnListener,实现消息的回发

声明交换机时,指定备份的交换机

10:消息如何分发?

若该队列至少有一个消费者订阅,消息将以循环(round-robin)的方式发送给消费者。每条消息只会分发给一个订阅的消费者(前提是消费者能够正常处理消息并进行确认)。通过路由可实现多消费的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值