没有合适的资源?快使用搜索试试~ 我知道了~
Java 消息中间件MQ面试题
资源推荐
资源详情
资源评论
。
为什么使用MQ? MQ的优点
。
消息队列有什么优缺点? RabbitMQ有什么优缺点?
。
你们公司生产环境用的是什么消息中间件?
。
Kafka、ActiveMQ、 RabbitMQ、 RocketMQ 有什么
优缺点?
。
MQ 有哪些常见问题?如何解决这些问题?
。
什么是RabbitMQ?
。
rabbitmq 的使用场景
。
RabbitMQ基本概念
。
RabbitMQ的工作模式
。
如何保证RabbitMQ消息的顺序性?
。
消息如何分发?
。
消息怎么路由?
。
消息基于什么传输?
。
如何保证消息不被重复消费?或者说 ,如何保证消息
消费时的幂等性?
。
如何确保消息正确地发送至 RabbitMQ? 如何确保消
息接收方消费了消息?
。
如何保证RabbitMQ消息的可靠传输?
为什么不应该对所有的 message 都使用持久化机
制?
。
如何保证高可用的? RabbitMQ 的集群
。
如何解决消息队列的延时以及过期失效问题?消息队
列满了以后该怎么处理?有几百万消息持续积压几小时 ,
说说怎么解决?
。
设计MQ思路
为什么使用MQ? MQ的优点
简答
·
异步处理 - 相比于传统的串行、并行方式 ,提高了系统吞吐量。
·
应用解耦 - 系统间通过消息通信 ,不用关心其他系统的处理。
·
流量削锋
- 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请
求。
·
日志处理
- 解决大量日志传输。
·
消息通讯 - 消息队列一般都内置了高效的通信机制 , 因此也可以用在纯的消息通
讯。比如实现点对点消息队列 ,或者聊天室等。
详答
主要是:解耦、异步、 削峰。
解耦:A 系统发送数据到
BCD 三个系统 ,通过接口调用发送。如果 E 系统也要
这个数据呢?那如果 C 系统现在不需要了呢?A 系统负责人几乎崩溃 …A 系统
跟其它各种乱七八糟的系统严重耦合 ,A 系统产生一条比较关键的数据 ,很多系
统都需要 A 系统将这个数据发送过来。如果使用
MQ ,A 系统产生一条数据,
发送到 MQ 里面去 ,哪个系统需要数据自己去 MQ 里面消费。如果新系统需要
数据 ,直接从
MQ 里消费即可;如果某个系统不需要这条数据了 ,就取消对
MQ 消息的消费即可。这样下来 ,A 系统压根儿不需要去考虑要给谁发送数
据 ,不需要维护这个代码 ,也不需要考虑人家是否调用成功、失败超时等情况。
就是一个系统或者一个模块 ,调用了多个系统或者模块 ,互相之间的调用很复
杂 ,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的 ,如果用
MQ 给它异步化解耦。
异步:A 系统接收一个请求 ,需要在自己本地写库 ,还需要在 BCD 三个系统写
库 , 自己本地写库要 3ms , BCD 三个系统分别写库要 300ms、450ms、
200ms。最终请求总延时是 3 + 300 + 450 + 200 = 953ms ,接近
1s ,用户
感觉搞个什么东西 ,慢死了慢死了。用户通过浏览器发起请求。如果使用
MQ ,那么 A 系统连续发送 3 条消息到 MQ 队列中 ,假如耗时 5ms ,A 系统从
接受一个请求到返回响应给用户 ,总时长是 3 + 5 = 8ms。
削峰 :减少高峰时期对服务器压力。
消息队列有什么优缺点? RabbitMQ有什么优缺点?
优点上面已经说了 ,就是在特殊场景下有其对应的好处 ,解耦、异步、削峰。
缺点有以下几个:
系统可用性降低
本来系统运行好好的 ,现在你非要加入个消息队列进去 ,那消息队列挂了 ,你的
系统不是呵呵了。 因此 ,系统可用性会降低;
系统复杂度提高
加入了消息队列 ,要多考虑很多方面的问题 ,比如:一致性问题、如何保证消息
不被重复消费、如何保证消息可靠性传输等。 因此 ,需要考虑的东西更多 ,复杂
性增大。
一致性问题
A 系统处理完了直接返回成功了 ,人都以为你这个请求就成功了;但是问题是,
要是 BCD 三个系统那里 , BD 两个系统写库成功了 ,结果 C 系统写库失败了 ,
咋整?你这数据就不一致了。
所以消息队列实际是一种非常复杂的架构 ,你引入它有很多好处 ,但是也得针对
它带来的坏处做各种额外的技术方案和架构来规避掉 ,做好之后 ,你会发现 ,妈
呀 ,系统复杂度提升了一个数量级 ,也许是复杂了 10 倍。但是关键时刻 ,用,
还是得用的。
你们公司生产环境用的是什么消息中间件?
这个首先你可以说下你们公司选用的是什么消息中间件 ,比如用的是
RabbitMQ ,然后可以初步给一些你对不同MQ中间件技术的选型分析。
举个例子: 比如说ActiveMQ是老牌的消息中间件 , 国内很多公司过去运用的还
是非常广泛的 ,功能很强大。
但是问题在于没法确认ActiveMQ可以支撑互联网公司的高并发、高负载以及高
吞吐的复杂场景 ,在国内互联网公司落地较少。而且使用较多的是一些传统企
业 ,用ActiveMQ做异步调用和系统解耦。
然后你可以说说RabbitMQ ,他的好处在于可以支撑高并发、高吞吐、性能很
高 , 同时有非常完善便捷的后台管理界面可以使用。
剩余27页未读,继续阅读
资源评论
千源万码
- 粉丝: 763
- 资源: 368
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功