如何吃透一个java项目
见字如面,我是威哥,一个从普通二本院校毕业,从未曾接触分布式、微服务、高并发到通过技术分享实现职场蜕变,成长为RocketMQ社区优秀布道师、大厂资深架构师,出版《RocketMQ技术内幕》一书,欢迎大家关注我,随时可私信我,一起交流进步。
我在尝试学习RocketMQ之前未曾接触过消息中间件,通过自己提炼的学习方法,最终出版《RocketMQ技术内幕》一书,并且成为RocketMQ社区优秀布道师,让我有了一个非常亮眼的标签,极大了提高的我的职场竞争力,在这里和大家分享一下我的方法。
我根据多年的阅读经验,整理了这么一套方法:
- 了解这款软件的使用场景、以及架构设计中将承担的责任。
- 寻找官方文档,从整体上把握这款软件的设计理念。
- 搭建自己的开发调试环境,运行官方提供Demo示例,为后续深入研究打下基础。
- 先主干流程再分支流程,注意切割,逐个击破。
接下来分享一下我在阅读 RocketMQ 源码时的一些经历,尽量让上述理论具有画面感。
1、了解 RocketMQ的应用场景
MQ的使用场景是比较清晰的,它的两大基本职责是解耦与削峰填谷。
举一个最简单的场景:新用户注册送积分、送优惠券场景,其原始架构设计通常如下:
可以看出用户注册和发优惠券,送积分是紧耦合的, 随着业务不断发展,活动部门提出在春节期间用户注册不送积分,发优惠券,而是赠送一个新春礼包,如果基于上述架构的话,需要去改动用户注册的主流程,违背了设计模式中的对修改关闭、对扩展开放的设计理念。
MQ的出现,可以很好地解决上面的问题:
通过引入MQ,用户注册主流程只需要完成注册逻辑,并向MQ发送一条消息,然后活动模块(送积分、送优惠券、送礼包)只需要订阅MQ中的消息,进行对应的处理。
这样消息注册主流程会非常的简单,不管活动种类如何变化,注册流程无需更改,这样就实现了解耦。
2 通读官方文档,从全局把握其设计理念
了解使用场景以后,接下我们可以去查阅官方文档,主要包括用户设计文档(架构设计),用户使用手册等,从全局了解其设计理念。
通过通读官方文档,不仅可以得出MQ的整体脉络(例如NameServer路由发现、消息发送、消息存储、消息消费、消息过滤),也能对顺序消费,零拷贝、同步刷盘、异步刷盘等“高端大气上档次”的高级特性产生兴趣与好奇,驱动我们去阅读其源码,探究其实现细节,使得我们在阅读源码中进行一定的自我思考成为了可能。
3、搭建开发调试环境
不同的系统搭建方式也不同,我这里有一篇文章,手把手教你搭建RocketMQ调试环境,这里就不细说了。
4 先主干,再分支
在搭建好本地开发环境后,切忌直接用Debug去跟踪消息发送的整体流程,因为这个流程实在是太长了,从比较粗粒度来看其流程如下图所示:
如果大家想一次性将上述流程的源码全部看一遍,几乎是不可能的。 因为消息发送高可用设计、消息存储、刷盘、同步等机制,每个点详细展开的工作都是海量的,我们没有这么多连续的时间,所以适当的拆分非常有必要。
经过这样一分解,就能专注理解其某一块的设计原理,所需要的连续时间也能大大减少,一口一口“吃”,最终完成整个体系的理解。
好了,本文就介绍到这里了,您的一键三连是对我最大的鼓励,当然可以加笔者微信:dingwpmz,备注CSDN,共同交流探讨。
最后分享笔者一个硬核的RocketMQ电子书,您将获得千亿级消息流转的运维经验。
获取方式:微信搜索【中间件兴趣圈】,回复RMQPDF即可获取。
- 点赞
- 收藏
- 关注作者
评论(0)