极客时间已完结课程限时免费阅读

预习 | 怎样更好地学习这门课?

预习 | 怎样更好地学习这门课?-极客时间

预习 | 怎样更好地学习这门课?

讲述:李玥

时长10:45大小14.76M

你好,我是李玥。在对专栏内容正式学习之前,我想先和你来聊聊如何学习消息队列,以及如何学习这门课。
从系统之间有通信需求开始呢,就产生了消息队列,它也是最古老的中间件之一。它的应用场景非常广泛,分布式系统中的很多进程间通信问题,都可以用消息队列来解决。可以说消息队列是所有后端程序员的必备技能。但是,想要系统、深入地学习消息队列,却并不容易。
市面上消息队列的论坛社区不少,但是信息错综混杂,你想要了解消息队列的完整知识体系,想深度进阶为消息队列达人,却没有清晰的学习路径可寻。为此,我开通这个系列课程,希望能帮助你完善知识体系,从理论到实践,从基础到进阶,从深度到广度,全方位吃透消息队列,进阶为消息队列小达人。

哪些人适合学消息队列?

后端开发者:消息队列几乎是每个后端程序员都会用到的中间件,无论你是开发微服务,实时计算,还是机器学习程序,都需要解决进程间通信的问题。
渴望技术提升的开发者:消息队列所涉及的高性能通信、海量数据存储、高并发这些底层的技术比较全面,并且功能简洁、结构清晰,容易入门但又同时具有足够的深度,非常适合用来深入分析和学习底层技术,帮助你实现从用“轮子”到造“轮子”的技术提升。

学习消息队列,有哪些门槛?

至少熟练掌握一门编程语言,掌握所有程序员都需要具备的一些基础技术知识和能力,例如:
熟练使用各种常用集合,比如:数组、链表、字典等;
掌握 Linux 系统的基础知识,会使用常用的命令;
具备多线程、并发控制编程能力;
编写过读写文件、通过网络收发数据的程序;
能看懂最基本的 UML 图,包括类图、时序图等;
了解最常用的几种设计模式和算法。
以下内容是一些“加分项”,当然这些“加分项”你不一定非要具备,但会让你的学习过程更加惬意。
1. 英文的阅读能力
因为整个技术圈大部分的技术类资料、开源软件的文档、代码的注释和论文都是用英文撰写的,如果你不满足于平时只看过时的二手资料,一定要努力提升自己,达到能独立、快速看懂英文技术文档的水平。
这对于技术人,其实并不是非常难的事儿。大多数英文技术文档涉及的专业词汇不超过一百个,使用的语法和句式都比较简单,理解起来绝对不会比中学英语考试题中的阅读理解更难。所以,最重要的是不要对英语过于恐惧,并且不要怕麻烦,多读多练习,平时多进行英文搜索,你会发现自己快速阅读能力的提升。
2. 掌握 Java 语言和其生态系统
大部分服务端的开源软件,包括我们这个课程涉及的 RocketMQ、Kafka、Pulsar 等,都是使用 Java 语言开发的。虽然 Java 本身有很多让人诟病的地方,比如僵化的泛型系统,不确定的 GC 机制等,也不断有 Go、Scala 等这些新兴语言来挑战 Java 的江湖地位,但是 Java 强大的生态系统在短时间内还是难以替代的。所以,无论你现在使用的是什么编程语言,学一点 Java 总是一个不错的选择。
3. 积极的学习态度
最后,也是最重要的一点是,对待写代码这件事儿的,你的真实态度是什么?
你是不是会认真地思考每一个细节是否已经做到最优?有没有为使用到的每个集合,仔细考虑到底是用数组,还是链表,还是其他哪种数据结构更合适?你有多少次迫于项目进度的压力而交出“算了,虽然我知道这么做不好,但也能凑合用”的代码?你有没有过为自己的某个(哪怕是自认为)绝妙设计,而成就感满满,幸福好几天的时刻?你会不会因为沟通时别人提到了一个你不知道的技术名词感到焦虑和羞愧,然后赶紧偷偷学习补齐这个技术短板?
针对这些问题,你可以做一个自我评估,了解自己到底对技术有多热爱?因为只有发自内心的对技术的热爱,才是保证持续学习并且不断提升自己的唯一动力。

由浅入深学习消息队列

在我看来,要想学好消息队列,不应该仅仅停留在使用层面上,还需要深入了解它的设计思路、实现原理和使用的底层技术。但是要注意循序渐进,由浅入深地去学习。
第一步就是去了解消息的基本概念,比如主题、订阅、分区等。这些基础的概念,就像我们学习一门编程语言中的基础语法一样,你只有搞清楚它们,才能进行后续的学习。然后,你需要去掌握使用消息队列的技能,能够处理一些常见的问题。
有了这些基础知识的储备以后,你就可以深入到源码中去,进而加深你对消息队列的理解,提升你的技术深度了。这时候你要了解其中必备的底层技术,比如高性能的网络传输、内存管理和锁的使用;同时也要深入学习消息队列一些高级特性的实现原理,比如如何实现事务消息、消息队列如何支撑海量 IoT 设备同时在线。
当然,学习消息队列的知识,最后一定要付诸实践,也就是落到代码层面上去操作执行。你可以选择用消息队列去实现你的业务系统,也可以使用实现消息队列的底层技术,去实现其他的中间件系统。

一份知识图谱

我整理了一张 “消息队列生态全景图”,涵盖了消息队列产品、标准和协议、应用场景、编程语言以及实现技术,希望可以帮助你对整个消息队列生态系统有宏观的了解和认知。
我们一起来大概浏览一下图中涉及的内容,首先我们来看看消息队列的产品、标准和协议,以及应用场景的部分。
目前,市面上有的消息队列产品很多,像 Kafka、ActiveMQ、RocketMQ、Pulsar、RabbitMQ 等等,其中比较主流的开源消息队列为 Kafka、RocketMQ 和 RabbitMQ。当然你并不需要把每个消息队列都去学习一遍,因为这些消息队列中很多的原理和知识都共通的。
在接下来的课程中,我会以这些开源消息队列产品为例子对具体的知识点进行讲解,也会顺便讲解每个产品它的特点。掌握了这些通用的原理,即使你以后碰到一款全新的、我们没有讲过的消息队列,你也可以做到很快上手。
与消息队列相关的协议和标准有 JMS、AMQP、MQTT 和 OpenMessaging。不过,目前为止还没有哪个标准或者协议能“一统江湖”,你做一个大概的了解即可,如果需要用到的时候再深入学习也来得及。
消息队列的应用范围广泛,在一些典型且常用的消息队列应用场景中,比如像处理日志数据、监控、流计算等,你需要了解,对应不同场景,应该选用哪个消息队列产品?什么样的姿势才是最佳的使用方式?在课程中,我会穿插着介绍一些最佳实践,帮助你在遇到类似场景时少踩一些坑。
然后,我们来看看这些开源消息队列产品实现中,涉及的编程语言和技术要点。
消息队列涉及到的语言有 Java、Scala 和 Erlang。实际上对于编程语言本身,你并不需要特别的关注,无论你最熟悉的语言是不是 Java 或者 Scala 都没关系,鉴于语言的相通性,只要你有编程语言的基础,即使是一门从未接触过的语言,通过短时间的学习达到可以读懂代码的水平,一般来说都是不成问题的。
我们学习的大部分知识点也不是和某种语言强相关的,你更多需要关注的是其中的设计思想、实现原理和实践方法这些技术本身的东西。
对于实现消息队列中涉及的重要的实现技术,像网络通信、序列化反序列化、分布式事务、内存管理等,这部分内容是这门课程中的精粹,需要你重点学习。每一个技术要点我都会在进阶篇中对应一节课程来专题讲解。这些基础的技术要点不仅仅可以用于实现消息队列,在其他各种中间件的实现过程中都会涉及,也是各种高级研发职位面试题中经常会被问到的内容。

学习资源推荐

消息队列的最佳学习资料就是它们的官方文档,因为官方文档更加详细准确,并且随着版本迭代,很多第三方教程文档会过时,而官方文档总能保持与当前版本同步更新。以下是几个开源消息队列的官方文档:
RocketMQ 中国开发者中心:http://rocketmq.cloud/zh-cn/ (感谢专栏用户 @0xFFFFFFFF 同学推荐)
在使用消息队列的过程中,如果遇到问题,要善用搜索引擎,我推荐你首选 Google,次之是 Stack Overflow,相对而言,这些搜索引擎搜索到有价值信息的概率会更高一些。
感谢阅读,如果你觉得这篇文章对你有一些启发,也欢迎把它分享给你的朋友。
分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 70

提建议

上一篇
开篇词 | 优秀的程序员,你的技术栈中不能只有“增删改查”
下一篇
01 | 为什么需要消息队列?
 写留言

精选留言(60)

  • 风云
    2019-07-22
    哇,终于等到了MQ专栏,立个Flag: 1.完成跟下来整个专栏内容; 2.对当天学到的内容进行总结思考,与老师留言讨论; 3.将学到的内容落到代码上,实践来巩固知识。 Go,Go,Go!
    展开
    共 2 条评论
    26
  • 小伟
    2019-07-24
    李老师的开们两篇让我想起了耗子叔专栏的签名:洞悉技术的本质,享受科技的乐趣。 技术的本质才是程序猿的目标,CRUD、项目、管理都是手段,名望、地位、金钱都是副产品。而能享受科技的乐趣则是精神层次的追求,如无剑胜有剑之境,可遇不可求。 先脚踏实地的磨练有剑之境再说。
    23
  • 0xFFFFFFFF
    2019-07-22
    rocketmq.cloud这个网址也推荐一下,对国内用户比较友好

    作者回复: 感谢你的推荐!

    共 5 条评论
    21
  • 张学磊
    2019-07-22
    老师京东的JMQ是基于哪个消息队列进行二次开发的?

    作者回复: 是完全自研的,近期就会开源。

    共 4 条评论
    9
  • 爱科幻爱魔法细节控
    2019-07-22
    第一个目标:尽快跨过学习消息队列的门槛

    作者回复: 这个门槛并不高,坚持学完这个课程就可以了啊

    8
  • 小明
    2020-03-17
    如果我的日常工作对于消息队列用的不多,怎么能让学习更有效,学了不用就容易遗忘

    作者回复: 最重要的是理解原理,原理这个东西一旦你理解了,就不容易忘。 至于一些如何操作和配置这些操作层面的东西,忘了也没关系,需要的时候再去查一下就可以了。

    5
  • pengshao
    2021-08-24
    http://rocketmq.cloud/zh-cn/ 这个网站打不开了?
    4
  • grey927
    2019-08-26
    李老师,我是Java后端,刚接触消息队列,之前完全没有接触过这块,请问在学这门课程的时候,需要事先熟悉一种消息队列的使用么?大概要熟悉到什么程度,PS:目前就用ActiveMQ写了一个收/发的小Demo

    作者回复: 最好是在日常的开发中使用过MQ,这样你会对MQ有一个感性的认识。

    4
  • grey927
    2019-08-23
    由于历史原因,现在要开始在我们的微服务下用消息队列,但是公司的消息队列采用的是ActiveMQ(我们的业务不复杂,负载也并不太高,应该ActiveMQ足够满足需求),请问李老师,关于ActiveMQ集成微服务有什么好的实践么?

    作者回复: 如果你用的是spring全家桶的话,spring messaging对ActiveMQ有非常好的集成和封装,建议使用。

    4
  • 2019-08-18
    这节好,感觉老师的课程安排非常的恰当,由浅入深循序渐进。 也在学习kafka的专栏,正好可以对比着学。 这节容易理解但不易做到,如果非常清楚,高性能的网络通信怎么实现?高性能的数据存储怎么实现?分布式数据一致性怎么实现?对于多线程高并发编程又了然于胸,我感觉什么样的中间件都能实现。
    4
  • miniluo
    2019-07-26
    老师好,想请教下老师;消息队列的重试机制一般是怎么做的?我们现在用的是RabbitMQ。

    作者回复: 后面我们会专门来讲,怎么做到不丢消息。

    4
  • 业余草
    2019-07-24
    MQ太多了,技术选型也讲一下吧

    作者回复: 你需要的课程已更新:“02 常见的消息队列有哪些,该如何选择?”

    3
  • ikel
    2019-07-24
    ZeroMQ现在都没人用了么?

    作者回复: 有啊,不过ZeroMQ它是Brokerless的设计,和其它MQ的使用场景不太一样。

    共 3 条评论
    3
  • 风云
    2019-07-22
    希望可以紧跟老师的步伐,稳扎稳打,逐步掌握这门课的内容。今天学到这门课,开心!

    作者回复: 我记住你了,每节课都点名哦。

    3
  • Nike
    2019-07-24
    逼一哈自己

    作者回复: 必须得这样!

    2
  • Hurt
    2019-07-24
    打卡2
    2
  • xtepCool
    2021-07-22
    有幸接触到JMQ,JSF京东这些中间件,对大佬们顶礼膜拜,"没有什么是实现不了的,实在不行在上面加一层中间件。"
    1
  • 业余爱好者
    2020-01-15
    如何学习mq? mq适合后端程序员和希望了解底层技术的人员学习。 学习mq,要有英文文档阅读能力,java编程经验,积极的学习态度。 学习mq不应该单单停留在使用层面,还要了解它的设计思路,实现原理和使用的底层技术。首先要弄懂一些基本的概念,队列主题分区等。之后可以深入源码,学习底层技术在代码中是如何实现的。 课程分为mq产品,协议,应用场景,编程语言和底层技术5个部分。产品较多,没有统一的规范。 学习的重点是mq中涉及的关键技术的实现,如网络通信,序列化与反序列化,分布式事务,内存管理等。
    展开
    1
  • TANMIYOO
    2019-07-23
    消息队列全景图清晰明确了学习消息队列需要关注的点,不光有实现功能的编程语言,还有其实现技术(必然要吃透其中每一种技术,相信认真学习下来自己的技术实力会有很大的进步),还有了解消息队列使用到的标准协议,知道热门的消息队列产品(优缺点),满足不同的应用场景,加油继续跟进

    作者回复: 加油!

    1
  • 不能扮演天使
    2019-07-22
    终于上线了喜欢的课题,MQ必须跟啊

    作者回复: 感谢支持,一定要坚持学完哦。

    1