MQ概述

1、MQ的意义面试

  主要目的 :解耦、异步、削峰redis

  解耦:一个业务须要多个模块共同实现,或者一条消息有多个系统须要对应处理,只须要主业务完成之后,发送一条MQ,其他模块消费MQ消息,便可实现业务,下降模块之间的耦合数据库

  异步:主业务执行结束后从属业务经过MQ,异步执行,减低业务的响应时间,提升用户体验架构

  削峰:高并发状况下,业务异步处理,提供高峰期业务处理能力,避免系统瘫痪并发

 

2、MQ的优势异步

  优势:解耦、异步、削峰高并发

  缺点:一、系统可用性下降。依赖服务也多,服务越容易挂掉。须要考虑MQ瘫痪的状况性能

     二、系统复杂性提升。须要考虑消息丢失、消息重复消费、消息传递的顺序性.net

     三、业务一致性。主业务和从属业务一致性的处理日志

 

3、经常使用MQ

  经常使用MQ : rocketmq、rabbitmq、activemq、kafka

  rocketmq:alibaba使用Java语言开发的MQ,2012年开源,交由Apache管理,支持消息重复消费,目前社区不算活跃

  rabbitmq:使用erlang语言开发,高并发性能好,社区活跃最高,支持消息持久化

  activemq:社区活跃度搞,支持消息持久化

  kafka:性能好(吞吐量、TPS)

 

4、MQ的区别

              

 

5、MQ常见问题的解决

 一、如何保证高可用

    集群部署,详情各MQ集群部署方案

 

 二、如何保证消息不被重复消费,保证消息的幂等性

   a、消息消费前,先经过业务校验是否消费国

   b、经过数据库索引,保证消息只消费一次

 

 三、如何保证消息可靠传输,不被丢失

   生产者丢失

   MQ中丢失

   消费端丢失

 

 四、如何保证消息顺序性

   参考各MQ实现细节

 

 五、如何解决消息队列积压问题

   先修复consumer的问题,确保其恢复消费速度

   建立一个新的topic,空间是原先的10倍,queue也建立原先的10倍

   写一个临时的consumer程序,去消费积压的消息,消费以后不作特殊处理,直接轮询写入临时建立的queue里面,直至消费结束

   临时征用10倍的机器来部署原先的xonsumer,每个消费一个临时的queue。等消费完,恢复原先部署的架构

 

 六、如何解决消息失效的问题

   消息若是长期积压,达到消息的有效日期,就会过时。能够采起批量重导,就是先临时大量消费消息(存储消息到数据库,或者日志,或者redis),等高峰过了之后,经过程序恢复消息,从新消费

 

 

 6、MQ面试题

 https://blog.csdn.net/lettyisme/article/details/85233008

相关文章
相关标签/搜索