当前位置:   article > 正文

RabbitMQ面试题

rabbitmq面试题

RabbitMQ面试题详解

  • 一、RabbitMQ的应用场景有哪些?
  • 二、消息的角色有哪些?
  • 三、RabbitMQ有哪些重要的组件?
  • 四、RabbitMQ中vhost的作用是什么?
  • 五、RabbitMQ如何发送消息?
  • 六、RabbitMQ怎样确保消息的稳定性?
  • 七、如何避免消息丢失?
  • 八、持久化有什么缺点?
  • 九、如何实现延迟消息队列?
  • 十、集群有什么用?
  • 十一、节点类型有哪些?
  • 十二、集群搭建需要注意什么?
  • 十三、集群中唯一的磁盘节点崩溃了会发生什么情况?
  • 十四、RabbitMQ 对集群节点的停止有顺序要求吗?
  • 十五、RabbitMQ 有几种广播类型?

一、RabbitMQ的应用场景有哪些?

1.异步处理
场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并行的方式
(1)串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端。 这有一个问题是,邮件,短信并不是必须的,它只是一个通知,而这种做法让客户端等待没有必要等待的东西;
在这里插入图片描述

(2)并行方式:将注册信息写入数据库后,发送邮件的同时,发送短信,以上三个任务完成后,返回给客户端,并行的方式能提高处理的时间;
在这里插入图片描述
假设三个业务节点分别使用50ms,串行方式使用时间150ms,并行使用时间100ms。虽然并性已经提高的处理时间,但是,前面说过,邮件和短信对我正常的使用网站没有任何影响,客户端没有必要等着其发送完成才显示注册成功,应该是写入数据库后就返回
(3)消息队列
引入消息队列后,把发送邮件,短信不是必须的业务逻辑异步处理
在这里插入图片描述

由此可以看出,引入消息队列后,用户的响应时间就等于写入数据库的时间+写入消息队列的时间(可以忽略不计),引入消息队列后处理后,响应时间是串行的3倍,是并行的2倍。

2.应用解耦
场景:双11是购物狂节,用户下单后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口.
这种做法有一个缺点:
当库存系统出现故障时,订单就会失败。(这样马云将少赚好多好多钱^ ^)
订单系统和库存系统高耦合.
引入消息队列
订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。
库存系统:订阅下单的消息,获取下单消息,进行库操作。
就算库存系统出现故障,消息队列也能保证消息的可靠投递,不会导致消息丢失(马云这下高兴了).
3.流量削峰
流量削峰一般在秒杀活动中应用广泛
场景:秒杀活动,一般会因为流量过大,导致应用挂掉,为了解决这个问题,一般在应用前端加入消息队列。
作用:
1.可以控制活动人数,超过此一定阀值的订单直接丢弃(我为什么秒杀一次都没有成功过呢^^)
2.可以缓解短时间的高流量压垮应用(应用程序按自己的最大处理能力获取订单)

二、消息的角色有哪些?

1.生产者、消费者和代理角色。
生产者:消息的创建者,负责创建消息和推送消息到服务器;
消费者:消息的接收方,用于处理数据和确认消息(ACK);
代理:rabbitmq本身,类似于“快递”角色,本身不生产消息。

三、RabbitMQ有哪些重要的组件?

ConnectionFactory连接管理器:程序与rabbitmq建立连接的管理器,在程序代码中使用
channel:信道,消息推送使用的通道
exchange:交换器,用于接受、分配消息
queue:队列,用于存储生产者生产的消息
routingKey:路由键,把生产者的消息分配到交换器上
bindingKey:绑定键,把交换器的消息绑定到队列上

四、RabbitMQ中vhost的作用是什么?

vhost可以理解为虚拟broker,即mq服务器,内部含独立的queue、exchange、binding等

五、RabbitMQ如何发送消息?

客户端和服务端要创建tcp连接,当创建成功后客户端会和mq服务器创建一条amqp信道,信道都有唯一的id,发布订阅都通过信道完成。

六、RabbitMQ怎样确保消息的稳定性?

提供了事务的功能,通过将channel信道设置为confirm(确认)模式。

七、如何避免消息丢失?

1.消息的持久化机制
2.消费者接收数据时设置的ACK消息确认机制
3.消息补偿机制
4.设置集群镜像模式

八、持久化有什么缺点?

缺点是降低了服务器的吞吐量,因为使用的是硬盘存储而非内存,可尽量使用ssd硬盘来缓解吞吐量的问题。

九、如何实现延迟消息队列?

通过消息过去后进入死信交换器,再由交换器转发到延迟消费队列,实现延迟功能。

十、集群有什么用?

高可用:某个服务器出现问题,整个mq还可以继续使用;
高容量:集群可以承载更多的消息量;

十一、节点类型有哪些?

磁盘节点:消息存储到磁盘;
内存节点:消息存储在内存中,重启服务器后消息丢失,性能高于磁盘类型;

十二、集群搭建需要注意什么?

各节点之间使用“- link”连接,不能忽略;
各节点使用的erlang cookie值必须相同,相当于秘钥,用于各节点之间的认证;
整个集群中必须包含一个磁盘节点;

十三、集群中唯一的磁盘节点崩溃了会发生什么情况?

集群可以正常运行,但不能更改任何东西。

十四、RabbitMQ 对集群节点的停止有顺序要求吗?

有,应该先关闭内存节点,最后再关闭磁盘节点,顺序相反的话,会导致消息的丢失。

十五、RabbitMQ 有几种广播类型?

direct(默认模式):发送方把消息发送给订阅方,如果有多个订阅者,默认采取轮询的方式进行消息发送;通过routingKey和exchange决定的那个唯一的queue可以接收消息;
headers:与 direct 类似,只是性能很差,此类型几乎用不到。
fanout:分发模式,将消息发送给所有订阅者;所有绑定到此exchange的queue都可以接收消息(纯广播、绑定到RabbitMQ的接 受者都能收到消息);
topic:匹配订阅模式,使用正则匹配到消息队列,能匹配到的都能接收到;所有符合routingKey(此时可以是一个表达式)所bind的queue可以接收消息;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/768571
推荐阅读
相关标签
  

闽ICP备14008679号