1、为什么要使用消息队列?(消息队列的应用场景)

这个问题主要考察为什么使用消息队列?在项目中为了解决什么问题?

消息队列的本质

  • 消息队列是一种“先进先出”的数据结构

  • 常见应用场景:解耦、异步、削峰

解耦

订单系统强依赖“支付系统”、“库存系统”、“物流系统”的返回结果。图一为强耦合关系,图二为消息队列解耦后。

异步

流量削峰

2、各种消息队列产品的比较?

MQ选型总结

  • activeMQ:早期使用较多,没经过大规模吞吐量场景验证,社区不是很活跃,现在使用的不多,不推荐

  • RabbitMQ:开发语言使用erlang,对于java开发工程师二次开发门槛较高,但rabbitMQ是开源的,社区活跃度较高,追求性能和稳定性的话,推荐使用。

  • 开发语言是java,在阿里内部经受过高并发的考验,稳定性和性能军不错,若考虑二次开发,推荐使用。

  • kafka:大数据领域的实时计算、日志采集等场景。用kafka业内的标准,社区活跃,推荐使用。大数据领域、日志采集等业务推荐使用。

3、消息队列的优点和缺点?

优点:解耦、异步、流量削峰

缺点:系统可用性降低、系统复杂性提高、一致性问题

4、如何保证消息队列的高可用性?

rabbitMQ的高可用性

普通集群模式

消息只存贮在mq某个实例上,其他节点从通过queue的元数据从该实例的queue取数据

特点:没有做到真正的高可用;数据拉取开销和单实例的瓶颈问题。

镜像集群模式

rocketMQ的高可用性-双主双从

5、如何保证消息不丢失?

消息丢失的原因

  • 消息生产者没有成功发送到MQ broker

  • 消息发送到mq broker后,broker宕机导致内存中的消息数据丢失

  • 消费者消费了消息,但是没有处理完毕就发生异常导致消息丢失。

确保消息不丢失方案

  • 发送方可靠发送

  • mq进行消息持久化

  • 消费放完成消费后进行ack确认,mq收到ack确认再删除本地消息

6、如何保证消息不被重复消费?(即保证消息的幂等性)

重复消息产生的根本原因:网络不可达

发送时消息重复

消费时消息重复

解决消息重复发送问题–消息密等性

  • 消息发送者发送消息时携带一个全局唯一的消息id

  • 消费者获取消费后先根据id再db/redis查询消息是否成功消费

  • 如果没有消费过直接消费,消费完成后写入db/redis

  • 如果消费过则不予处理

7、如何保证消息的顺序性?

全局顺序消费:生产者:MQ:消费者=1:1:1

局部顺序消费

  • 生产者根据消息id将同意组消息发送到一个queue中

  • 多个消费者同时获取queue中的消息进行消费

  • mq使用分段锁保证单个queue中的有序消费

8、大量消息推挤处理怎么办?

堆积消息的原因:

  • 网络故障

  • 消费方处理消息后没有给mq broker正常应答

消息堆积的处理方案

  • 检查并修复消费方的正常消费速度

  • 将堆积的消息转存到容量更大的mq集群

  • 增加多个消费者节点并行消费堆积消息

  • 消费完毕后,回复原始架构

9、消息过期怎么处理?

消息过期的原因

给消息设置了过期时间,如果超时还未被消费,则视为消息过期。过期消息可以转存到死信队列。

消息过期的处理方案

  • 过期消息进入到死信队列

  • 启动专门的消费者消费死信队列消息,并写入数据库记录日志

  • 查询数据库消息日志,重新发送消息到mq

《消息队列》常问面试题相关推荐

  1. RabbitMQ消息队列常见面试题总结

    1.什么是消息队列: 1.1.消息队列的优点: (1)解耦:将系统按照不同的业务功能拆分出来,消息生产者只管把消息发布到 MQ 中而不用管谁来取,消息消费者只管从 MQ 中取消息而不管是谁发布的.消息 ...

  2. android常问面试题及答案 经典

    android常问面试题及答案 经典 转载 1. 什么是Activity? 四大组件之一,一般的,一个用户交互界面对应一个activity, activity 是Context的子类,同时实现了win ...

  3. 2022最新Spring相关大厂常问技术面试题大全 —— 金三银四好时机

    Spring相关大厂常问面试题 1. 什么是 Spring 框架? 2. 列举一些重要的Spring模块? 3. @RestController 与 @Controller 的区别 4. 谈谈自己对于 ...

  4. 软件测试常问面试题【二】

    软件测试常问面试题[二] 1.APP性能测试遇到什么bug没有? 性能bug:卡顿.ANR.内存泄漏 2.什么是兼容性测试?兼容性测试要测试哪些方面? 主要包括: 不同操作系统版本的兼容(Androi ...

  5. 2020年Java常问面试题--聂

    2020年Java常问面试题 打算这几天每天更新15~20题.(这样有助于你们阅读和理解!)我们先从简单的开始 加qq群:568680919,免费赠送1000道java面试题和简历模板 JDK 和 J ...

  6. VUE前端常问面试题

    文章目录 一.VUE前端常问面试题 二.文档下载地址 一.VUE前端常问面试题 1.MVC和MVVM 区别 MVC:MVC全名是 Model View Controller,即模型-视图-控制器的缩写 ...

  7. Java常问面试题整理,帮你搞定‘金9银10’(附答案纯干货)

    前言: 工作做螺丝钉,面试造火箭,我想这个是每个程序员比较头疼的事情,但是又有必须经历的流程,尤其是摸不清面试官问的问题,准备不充分,导致面试的时候不知道如何回答.本文是小编个人从几十次面试中挑选的面 ...

  8. Redis常问面试题及答案

    本文分享下常见的Redis面试题 文章目录 什么是redis Reids的特点 使用redis有哪些好处 redis相比memcached有哪些优势 Memcache与Redis的区别都有哪些 red ...

  9. Spring常问面试题及答案汇总(2022版)

    网上也有很多关于Spring常问问题/面试题整理的文章,我感觉大部分都是互相 copy,而且很多问题也不是很好,有些回答也存在问题.所以,自己花了一周的业余时间整理了一下,希望对大家有帮助. 1. 什 ...

最新文章

  1. phpstudy2014 php7.0,phpstudy下载_phpStudy下载2014 官方版_php环境集成包 1.0_零度软件园...
  2. 包含Tomcat 9的JBoss Web Server 5已发布
  3. java-2018-01-17计划
  4. 如何在CentOS 7中禁止IPv6
  5. 【控制】第九章-线性系统的状态空间描述
  6. Android ViewModel+liveData+lifecycle+databinding打造MVVM
  7. vue aixos请求json
  8. YBTOJ洛谷P4551:最长异或路径(trie树)
  9. 【贪心】失意(jzoj 2318)
  10. getlong_Java即时类| 带示例的getLong()方法
  11. 计算机网络设置中如何删除家庭组,【求助】Windows无法从该家庭组中删除你的计算机...
  12. linux学习笔记(三):文件系统结构
  13. SQL server数据缓存依赖
  14. linux光盘启动盘制作工具,Linux_最新万能 DOS 启动盘制作全攻略(软盘+光盘+U盘+硬盘+NTFS+应急实用工具),首先说明一下各种操作系统启 - phpStudy...
  15. jq实现点击复制文本功能
  16. excel分离中英文
  17. 神兽卡再次进化,华硕正式推出 Essense STX II 与 STX II 7.1 内接式音效卡 ...
  18. 各种SKYPE网页代码,SKYPE在线代码
  19. 数据分析之matplotlib画图工具的使用(一)
  20. 触控板用不了,解决办法:

热门文章

  1. java-php-python-ssm-计算机课程在线培训学习管理系统-计算机毕业设计
  2. .sqc文件代码审计
  3. python制作翻译小软件_python 制作一个翻译软件
  4. 开启MicroPython多线程模式
  5. ideal远程debug tomcat
  6. Ubuntu 10.04里安装强大抓图工具Shutter
  7. Brightcove喜获两项技术与工程艾美奖
  8. Ubuntu安装Battery Historian分析电量(配置环境)
  9. 基于python的母亲节贺卡
  10. 给出年月日 计算该日是该年的第几天