消息中间件

消息中间件是分布式系统中的重要组件,在实际工作中常用消息中间件进行系统间数据交换,从而解决应用解耦、异步消息、流量削峰等问题,实现高性能、高可用、可伸缩和最终一致性架构。

目前市面上可供选择的消息中间件有RabbitMQ、ActiveMQ、Kafka、RocketMQ、ZeroMQ、MetaMQ等。面试也是问的越来越多,这篇文章要与大家聊一聊RabbitMQ、ActiveMQ、Kafka、RocketMQ这四种应用比较广泛的消息中间件。(通过阿里技术官总结的一份消息中间件精髓文档与阿里面试真题展开)

阿里可以说是互联网行业的T0,阿里的技术官们也可以说是行业的顶尖人才,他们总结的文档质量可以说是毋庸置疑的。这份文档介绍了现在常用的四种消息中间件产品在各个业务场景中的使用案例。大家通过案例得到启发,可以在实际工作中进行产品选型、业务场景方案制定、性能调整等提供思路。

为了不影响大家的阅读体验,就只能将主要内容用截图的方式展示出来了。

分布式消息中间件实践

  • 消息队列

消息队列(MQ)是一种系统间相互协作的通信机制。

  • 消息协议

消息协议则是指用于实现消息队列功能时所涉及的协议。

  • RabbitMQ

RabbitMQ是一个由 Erlang语言开发的基于AMQP标准的开源实现。



  • ActiveMQ

ActiveMQ是由Apache出品的一款开源消息中间件,旨在为应用程序提供高效、可扩展、稳定、安全的企业级消息通信。

  • Kafka

Kafka最早是由 LinkedIn公司开发的一种分布式的基于发布/订阅的消息系统,后来成为Apache 的顶级项目。

  • RocketMQ

RocketMQ是阿里巴巴于2012年开源的分布式消息中间件,后来捐赠给Apache软件基金会,并于2017年9月25日成为Apache 的顶级项目。

消息中间件面试专题

  1. RabbitMQ 中的 broker 是指什么?cluster 又是指什么?
  2. 什么是元数据?元数据分为哪些类型?包括哪些内容?与 cluster 相关的元数据有哪些?元数据是如何保存的?元数据在 cluster 中是如何分布的?
  3. RAM node 和 disk node 的区别?
  4. RabbitMQ 上的一个 queue 中存放的 message 是否有数量限制?
  5. RabbitMQ 概念里的 channel、exchange 和 queue 这些东东是逻辑概念,还是对应着进程实体?这些东东分别起什么作用?
  6. vhost 是什么?起什么作用?
  7. 在单 node 系统和多 node 构成的 cluster 系统中声明 queue、exchange ,以及进行 binding 会有什么不同?
  8. 客户端连接到 cluster 中的任意 node 上是否都能正常工作?
  9. 若 cluster 中拥有某个 queue 的 owner node 失效了,且该 queue 被声明具有durable 属性,是否能够成功从其他 node 上重新声明该 queue ?
  10. cluster 中 node 的失效会对 consumer 产生什么影响?若是在 cluster 中创建了mirrored queue ,这时 node 失效会对 consumer 产生什么影响?
  11. 能够在地理上分开的不同数据中心使用 RabbitMQ cluster 么?
  12. 为什么 heavy RPC 的使用场景下不建议采用 disk node ?
  13. 向不存在的 exchange 发 publish 消息会发生什么?向不存在的 queue 执行consume 动作会发生什么?
  14. routing_key 和 binding_key 的最大长度是多少?
  15. RabbitMQ 允许发送的 message 最大可达多大?
  16. 什么情况下 producer 不主动创建 queue 是安全的?
  17. “dead letter”queue 的用途?
  18. 为什么说保证 message 被可靠持久化的条件是 queue 和 exchange 具有durable 属性,同时 message 具有 persistent 属性才行?
  19. 什么情况下会出现 blackholed 问题?
  20. 如何防止出现 blackholed 问题?
  21. Consumer Cancellation Notification 机制用于什么场景?
  22. Basic.Reject 的用法是什么?
  23. 为什么不应该对所有的 message 都使用持久化机制?
  24. RabbitMQ 中的 cluster、mirrored queue,以及 warrens 机制分别用于解决什么问题?存在哪些问题?
  25. 什么是 ActiveMQ?
  26. ActiveMQ 服务器宕机怎么办?
  27. 死信队列是什么
  28. ActiveMQ 中的消息重发时间间隔和重发次数吗?

上面这28道消息中间件面试题全部是阿里面试的真题,配合文档使用可以起到事半功倍的作用,对于没基础的可以让你脑子里对消息中间件有一个系统的概念,对于有一定基础的老哥也可以起到查漏补缺的作用。