2021-Java后端工程师面试指南-(消息队列)

2022-07-29 08:58:30 浏览数 (1)

前言

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/bin392328206/six-finger 种一棵树最好的时间是十年前,其次是现在

Tips

面试指南系列,很多情况下不会去深挖细节,是小六六以被面试者的角色去回顾知识的一种方式,所以我默认大部分的东西,作为面试官的你,肯定是懂的。

https://www.processon.com/view/link/600ed9e9637689349038b0e4

上面的是脑图地址

叨絮

消息队列,在互联网企业级开发是一个必不可少的中间件,今天来看看我们的MQ吧

然后下面是前面的文章汇总

  • 2021-Java后端工程师面试指南-(引言)
  • 2021-Java后端工程师面试指南-(Java基础篇)
  • 2021-Java后端工程师面试指南-(并发-多线程)
  • 2021-Java后端工程师面试指南-(JVM)
  • 2021-Java后端工程师面试指南-(MySQL)
  • 2021-Java后端工程师面试指南-(Redis)
  • 2021-Java后端工程师面试指南-(Elasticsearch)

小六六接触的MQ呢?也不算太多,我就具体说说我们经常用的rabbitmq和rocketmq

说说什么是消息队列

我们可以把消息队列看作是一个存放消息的容器,当我们需要使用消息的时候,直接从容器中取出消息供自己使用即可。消息队列是分布式系统中重要的组件之一。使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。我们知道队列 Queue 是一种先进先出的数据结构,所以消费消息时也是按照顺序来消费的。

那你的系统为啥要使用消息队列

  • 通过异步处理提高系统性能(减少响应所需时间)
  • 削峰/限流:先将短时间高并发产生的事务消息存储在消息队列中,然后后端服务再慢慢根据自己的能力去消费这些消息,这样就避免直接把后端服务打垮掉。
  • 降低系统耦合性:使用消息队列还可以降低系统耦合性。我们知道如果模块之间不存在直接调用,那么新增模块或者修改模块就对其他模块影响较小,这样系统的可扩展性无疑更好一些

那你说说引入消息队列的优缺点是什么

优点:

  • 解耦
  • 削峰
  • 异步数据分发

缺点

  • 系统可用性降低
  • 系统复杂度提高
  • 一致性问题

说说你接触过的mq,说说他们的特点和使用场景呗

那你聊聊JMS和AMQP

JMS JMS(JAVA Message Service,Java消息服务)API是一个消息服务的标准或者说是规范,允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分布式通信耦合度更低,消息服务更加可靠以及异步性。ActiveMQ 就是基于 JMS 规范实现的。

AMQP AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准 高级消息队列协议(二进制应用层协议),是应用层协议的一个开放标准,为面向消息的中间件设计,兼容 JMS。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件同产品,不同的开发语言等条件的限制。

  • AMQP 为消息定义了线路层(wire-level protocol)的协议,而JMS所定义的是API规范。在 Java 体系中,多个client均可以通过JMS进行交互,不需要应用修改代码,但是其对跨平台的支持较差。而AMQP天然具有跨平台、跨语言特性。
  • JMS 支持TextMessage、MapMessage 等复杂的消息类型;而 AMQP 仅支持 byte[] 消息类型(复杂的类型可序列化后发送)。
  • 由于Exchange 提供的路由算法,AMQP可以提供多样化的路由方式来传递消息到消息队列,而 JMS 仅支持 队列 和 主题/订阅 方式两种。

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

这个的话其实就是看你自己公司使用哪个队列你就回答哪个队列,小六六这边说rabbit 和rocket

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