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面试四连炮

  • 相关阅读:
    rapidjson 的练习
    在Struts2中集成Spring详细讲解
    AJAX实例入门
    Redhat Enterprise Linux中如何关闭SELinux?
    C3P0连接池详细配置
    hibernate中load,get;find,iterator;merge,saveOrUpdate,lock的区别
    107个常用Javascript语句
    车祸 shit
    JAVASCRIPT实现XML分页
    javabeans的运用
  • 原文地址:https://www.cnblogs.com/yangjiming/p/11199095.html
Copyright © 2011-2022 走看看