Java工程师面试突击一、消息队列(MQ)

Java工程师面试突击第一季

分布式系统、高并发架构、高可用架构

一、MQ

1、解耦

不用MQ的系统耦合场景

比如A系统要给BCD三个系统发送消息,如果再出现新的系统需要A系统的数据,那么就会再让A系统调用新的系统的接口,同样,如果一个系统不需要接收A系统的数据,就会在A系统中删除调用接口的代码,A系统还需要考虑如果B系统挂了怎么办,访问超时怎么办等…在这里插入图片描述

使用了MQ之后的解耦场景

在这里插入图片描述通过一个MQ,发布和订阅消息的这么一个模型,pub/Sub模型,系统A就和其他系统解耦了。
在这里插入图片描述

2、异步

不用MQ的同步高延时请求场景

在这里插入图片描述一般互联网的企业对用户的直接的操作,一般要求是每个请求都必须在200ms以内完成,对用户几乎睡无感知的。

使用MQ进行异步化之后的接口性能优化

在这里插入图片描述在这里插入图片描述

3、削峰

没有用MQ的时候高峰期系统被打死的场景

在这里插入图片描述说明一下,一般的mysql,抗到每秒2000个请求就差不多了,如果每秒请求到5000的话,可能就直接把mysql打死了。

使用MQ来进行削峰

在这里插入图片描述

4、消息队列有什么优点和缺点?

架构中引入MQ之后可能存在的一些问题
  • 系统可用性降低(MQ故障,整个系统就挂掉)
  • 导致系统要考虑的问题变多,从而导致系统复杂性变高
  • 一致性问题

在这里插入图片描述

5、kafka、activemq、rabbitmq、rocketmq都有什么优点和缺点?

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

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

RabbitMQ的高可用

RabbitMQ是比较有代表性的,因为是基于主从做高可用性的,我们就以他为例子讲解第一种MQ的高可用性怎么实现。

rabbitmq的三种模式:单机模式、普通集群模式、镜像集群模式

  • 单机模式
  • 普通集群模式
  • 镜像集群模式

在这里插入图片描述

普通集群模式

在这里插入图片描述
在这里插入图片描述

镜像集群模式

在这里插入图片描述在这里插入图片描述

kafka高可用架构(分布式模式)

一个节点存部分数据,不是全部,和镜像集群不同(存全部)
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

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

重复消费原因

幂等性:通俗点说就是一个数据,或者一个请求,给你重复来多次,你得确保对应的数据是不会改变的,不能出错。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

幂等性解决

在这里插入图片描述

8、如何保证消息可靠性传输(如何处理消息丢失的问题)?

用mq有一个基本原则就是,数据一条不能多,一条不能少,就是说数据别弄丢了。

mq可能存在的数据丢失问题

在这里插入图片描述

1、rabbitmq
生产者如何保证消息不丢失
1、使用事务解决(吞吐量下降,耗性能)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、使用confirm模式(回调机制)解决

异步模式

在这里插入图片描述

rabbitmq弄丢了数据(需要持久化)

在这里插入图片描述哪怕是你给rabbitmq开启了持久化机制,也有一种可能,就是这个消息写到了rabbitmq中,但是还没来得及持久化到磁盘上,结果不巧,此时rabbitmq挂了,就会导致内存中的一点点数据会丢失。

消费者弄丢了数据

在这里插入图片描述
在这里插入图片描述在这里插入图片描述消费者这个层面,你需要将AutoAck关闭,然后每次你自己确定已经处理完了一条消息之后,你再将ACK发送给rabbitmq。
然后rabbitmq就会将这个消息重新发送给其他的消费者去处理。

2、kafka

在这里插入图片描述在这里插入图片描述

9、如何保证消息顺序性

在这里插入图片描述

rabbitmq

在这里插入图片描述
在这里插入图片描述

rabbitmq如何保证消息的顺序性

在这里插入图片描述
把需要保证顺序的数据放到一个queue里面。

kafka

在这里插入图片描述在这里插入图片描述

10、快速处理积压的消息

在这里插入图片描述
在这里插入图片描述

11、如果让你开发消息队列中间件,你会怎么设计架构?

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值