zoukankan      html  css  js  c++  java
  • 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面试四连炮

  • 相关阅读:
    sss
    sss
    maven tomcat jstl 异常
    第1章 预备知识
    第2章 存储管理
    第8章 虚拟机字节码执行引擎
    第23章 Spring MVC初体验
    第1章 预备知识
    第5章 Java中的锁
    第13章 线程安全与锁优化
  • 原文地址:https://www.cnblogs.com/yangjiming/p/11199095.html
Copyright © 2011-2022 走看看