如何吃透一个java项目
见字如面,我是威哥,一个从普通二本院校毕业,从未曾接触分布式、微服务、高并发到通过技术分享实现职场蜕变,成长为RocketMQ社区优秀布道师、大厂资深架构师,出版《RocketMQ技术内幕》一书,在CSDN中记录了我的成长历程,欢迎大家关注我,随时可私信我,一起交流进步。
我在尝试学习RocketMQ之前未曾接触过消息中间件,通过自己提炼的学习方法,最终出版《RocketMQ技术内幕》一书,并且成为RocketMQ社区优秀布道师,让我有了一个非常亮眼的标签,极大了提高的我的职场竞争力,在这里和大家分享一下我的方法。
我根据多年的阅读经验,整理了这么一套方法:
- 了解这款软件的使用场景、以及架构设计中将承担的责任。
- 寻找官方文档,从整体上把握这款软件的设计理念。
- 搭建自己的开发调试环境,运行官方提供Demo示例,为后续深入研究打下基础。
- 先主干流程再分支流程,注意切割,逐个击破。
接下来分享一下我在阅读 RocketMQ 源码时的一些经历,尽量让上述理论具有画面感。
1、了解 RocketMQ的应用场景
MQ的使用场景是比较清晰的,它的两大基本职责是解耦与削峰填谷。
举一个最简单的场景:新用户注册送积分、送优惠券场景,其原始架构设计通常如下:
可以看出用户注册和发优惠券,送积分是紧耦合的, 随着业务不断发展,活动部门提出在春节期间用户注册不送积分,发优惠券,而是赠送一个新春礼包,如果基于上述架构的话,需要去改动用户注册的主流程,违背了设计模式中的对修改关闭、对扩展开放的设计理念。
MQ的出现,可以很好地解决上面的问题:
通过引入MQ,用户注册主流程只需要完成注册逻辑,并向MQ发送一条消息,然后活动模块(送积分、送优惠券、送礼包)只需要订阅MQ中的消息,进行对应的处理。
这样消息注册主流程会非常的简单,不管活动种类如何变化,注册流程无需更改,这样就实现了解耦。
2 通读官方文档,从全局把握其设计理念
了解使用场景以后,接下我们可以去查阅官方文档,主要包括用户设计文档(架构设计),用户使用手册等,从全局了解其设计理念。
通过通读官方文档,不仅可以得出MQ的整体脉络(例如NameServer路由发现、消息发送、消息存储、消息消费、消息过滤),也能对顺序消费,零拷贝、同步刷盘、异步刷盘等“高端大气上档次”的高级特性产生兴趣与好奇,驱动我们去阅读其源码,探究其实现细节,使得我们在阅读源码中进行一定的自我思考成为了可能。
3、搭建开发调试环境
不同的系统搭建方式也不同,我这里有一篇文章,手把手教你搭建RocketMQ调试环境,这里就不细说了。
4 先主干,再分支
在搭建好本地开发环境后,切忌直接用Debug去跟踪消息发送的整体流程,因为这个流程实在是太长了,从比较粗粒度来看其流程如下图所示:
如果大家想一次性将上述流程的源码全部看一遍,几乎是不可能的。 因为消息发送高可用设计、消息存储、刷盘、同步等机制,每个点详细展开的工作都是海量的,我们没有这么多连续的时间,所以适当的拆分非常有必要。
经过这样一分解,就能专注理解其某一块的设计原理,所需要的连续时间也能大大减少,一口一口“吃”,最终完成整个体系的理解。
好了,本文就介绍到这里了,您的一键三连是对我最大的鼓励,当然可以加笔者微信:dingwpmz,备注CSDN,共同交流探讨。
最后分享笔者一个硬核的RocketMQ电子书,您将获得千亿级消息流转的运维经验。
获取方式:微信搜索【中间件兴趣圈】,回复RMQPDF即可获取。
如何吃透一个java项目相关推荐
- 如何真正的吃透一个Java项目?
如何真正的吃透一个Java项目?这里要说吃透一个Java项目的标准就是:下次遇到此类Java项目可以快速使用写过的Java项目的解决方案完成它. 要达到这个的标准,还得从开发一个Java项目的过程来分 ...
- 初学者如何吃透一个Java项目
不少初学者朋友在学习Java过程中,会对着视频敲Java项目,其中遇到的BUG还能解决,但就是每次敲完一个项目,就感觉很空虚,项目里面的知识点感觉懂了但又好像没懂 这些朋友应该怎样才能掌握一个项目所用 ...
- 超强使用干货!教你如何吃透一个Java项目
整理了一些Java项目,分享给大家 1. 一款Java开源的Spring Boot即时通讯IM聊天系统 地址:一款Java开源的Spring Boot即时通讯IM聊天系统 2. Java外卖点餐系统[ ...
- 如何使用eclipse软件创建一个Java项目?
同学们在参加Java的时候老师肯定会教给你们如何去创建一个项目,这里怕有些同学没记住,所以单独为大家分享一篇如何使用eclipse软件创建一个Java项目教程,感觉有用的话收藏转发一下~ eclips ...
- eclipse怎么导入一个Java项目(莫要错过,最详细教程!)
导出项目教程链接-->传送门 对于eclipse软件,常规的打开文件方法是无法打开一个项目的, 那么怎样导入一个java项目呢?方法如下 第一步 在电脑打开eclipse软件,点击file-&g ...
- java gradle入门_Gradle入门:我们的第一个Java项目
java gradle入门 这篇博客文章描述了如何使用Gradle编译和打包一个简单的Java项目. 我们的Java项目只有一个要求: 我们的构建脚本必须创建一个可执行的jar文件. 换句话说,我们必 ...
- Gradle入门:我们的第一个Java项目
这篇博客文章描述了如何使用Gradle编译和打包一个简单的Java项目. 我们的Java项目只有一个要求: 我们的构建脚本必须创建一个可执行的jar文件. 换句话说,我们必须能够使用以下命令运行程序: ...
- 创建一个java项目
新建一个java项目 创建一个java项目 使用MyEclipse 新建项目 文件>新建>java项目 项目名称与存放路径 如果弹出此项,选择yes 项目创建成功 界面的效果 项目目录中的 ...
- idea怎样创建一个java项目?
idea创建java项目的方法:首先在电脑上打开idea,并依次点击"File->New->Project";然后选择JDK安装的路径,并点击New;接着创建一个简单的 ...
最新文章
- 吴恩达卷积神经网络课程——第一周笔记
- C++加快编译速度的方法
- 百度前离职员工偶遇同门百度人,轻松通过面试,直呼放水很明显!这样真的好么?...
- 2018年1月29日
- 让外网访问内网Ngrok工具
- [APP] Android 开发笔记 001-环境搭建与命令行创建项目
- ruby 执行函数_Ruby at()函数
- 微信自动回复如何实现?用 Python 就可以!
- 脚本修改域内本地管理员密码
- seg代码配置的踩坑记录
- 医疗机构被勒索软件攻击的可能性是金融机构的114倍
- bzoj 3745 [Coci2015]Norma——序列分治
- 8位十六进制转换32位十六进制_网络中的数制系统--二进制十六进制与十进制之间的相互转换...
- 开发者必备英文网站合集
- 云原生 - 阿里云 SLB、CDN、SCDN、DCDN 区别在哪?如何选择?
- Cyclone IV E系列介绍
- MPEG4与.mp4
- 我的世界服务器无法发送聊天信息,我的世界聊天框指令传送 | 手游网游页游攻略大全...
- labelme_json_to_dataset报错: ModuleNotFoundError: No module named ‘labelme
- windows设置某应用开机自启