RabbitMQの面试问题

1.  为什么要使用MQ?

根据使用场景划分,主要有异步,解耦,削锋填谷

2.  使用了MQ会有什么缺点?带来什么新问题?

  1. 系统可用性降低;MQ可能会挂掉,数据丢失,系统运行出问题
  2. 系统复杂度提高;需要考虑消息重复消费,消息丢失,消息顺序性等问题
  3. 数据一致性问题;

3.  怎么保证MQ消息不丢失?

  • 生产者丢了数据
    1. 事务方式,发送消息前开启事务,有异常事务回滚,处理正常提交事务,这样会降低吞吐量和性能
    2. 异步消息确认机制,MQ收到消息后会发送一个ack,通知生产者MQ已成功接收消息。
  • RabbitMQ丢了数据
    持久化,配合confirm机制,消息写入后会持久化到磁盘,防止数据丢失
    1. 创建queue时将其设置持久化,保证持久化queue的元数据
    2. 设置deliveryMode=2,持久化消息到磁盘
  • 消费端丢了数据
    关闭RabbitMQ消费者的自动提交ack,在消费者处理完这条消息之后再手动提交ack。

4. 怎么保证MQ的高可用性?

RabbitMQ有三种模式:单机模式,普通集群模式,镜像集群模式

镜像集群模式(推荐):创建的queue无论元数据还是queue里的消息都会存在于多个实例上,每次写消息到queue的时候,都会自动把消息到多个实例的queue里进行消息同步。

原文链接:MQ面试四连炮

猜你喜欢

转载自www.cnblogs.com/yangjiming/p/11199095.html