见字如面,我是威哥,一个从普通二本院校毕业,从未曾接触分布式、微服务、高并发到通过技术分享实现职场蜕变,成长为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项目相关推荐

  1. 如何真正的吃透一个Java项目?

    如何真正的吃透一个Java项目?这里要说吃透一个Java项目的标准就是:下次遇到此类Java项目可以快速使用写过的Java项目的解决方案完成它. 要达到这个的标准,还得从开发一个Java项目的过程来分 ...

  2. 初学者如何吃透一个Java项目

    不少初学者朋友在学习Java过程中,会对着视频敲Java项目,其中遇到的BUG还能解决,但就是每次敲完一个项目,就感觉很空虚,项目里面的知识点感觉懂了但又好像没懂 这些朋友应该怎样才能掌握一个项目所用 ...

  3. 超强使用干货!教你如何吃透一个Java项目

    整理了一些Java项目,分享给大家 1. 一款Java开源的Spring Boot即时通讯IM聊天系统 地址:一款Java开源的Spring Boot即时通讯IM聊天系统 2. Java外卖点餐系统[ ...

  4. 如何使用eclipse软件创建一个Java项目?

    同学们在参加Java的时候老师肯定会教给你们如何去创建一个项目,这里怕有些同学没记住,所以单独为大家分享一篇如何使用eclipse软件创建一个Java项目教程,感觉有用的话收藏转发一下~ eclips ...

  5. eclipse怎么导入一个Java项目(莫要错过,最详细教程!)

    导出项目教程链接-->传送门 对于eclipse软件,常规的打开文件方法是无法打开一个项目的, 那么怎样导入一个java项目呢?方法如下 第一步 在电脑打开eclipse软件,点击file-&g ...

  6. java gradle入门_Gradle入门:我们的第一个Java项目

    java gradle入门 这篇博客文章描述了如何使用Gradle编译和打包一个简单的Java项目. 我们的Java项目只有一个要求: 我们的构建脚本必须创建一个可执行的jar文件. 换句话说,我们必 ...

  7. Gradle入门:我们的第一个Java项目

    这篇博客文章描述了如何使用Gradle编译和打包一个简单的Java项目. 我们的Java项目只有一个要求: 我们的构建脚本必须创建一个可执行的jar文件. 换句话说,我们必须能够使用以下命令运行程序: ...

  8. 创建一个java项目

    新建一个java项目 创建一个java项目 使用MyEclipse 新建项目 文件>新建>java项目 项目名称与存放路径 如果弹出此项,选择yes 项目创建成功 界面的效果 项目目录中的 ...

  9. idea怎样创建一个java项目?

    idea创建java项目的方法:首先在电脑上打开idea,并依次点击"File->New->Project";然后选择JDK安装的路径,并点击New;接着创建一个简单的 ...

最新文章

  1. 吴恩达卷积神经网络课程——第一周笔记
  2. C++加快编译速度的方法
  3. 百度前离职员工偶遇同门百度人,轻松通过面试,直呼放水很明显!这样真的好么?...
  4. 2018年1月29日
  5. 让外网访问内网Ngrok工具
  6. [APP] Android 开发笔记 001-环境搭建与命令行创建项目
  7. ruby 执行函数_Ruby at()函数
  8. 微信自动回复如何实现?用 Python 就可以!
  9. 脚本修改域内本地管理员密码
  10. seg代码配置的踩坑记录
  11. 医疗机构被勒索软件攻击的可能性是金融机构的114倍
  12. bzoj 3745 [Coci2015]Norma——序列分治
  13. 8位十六进制转换32位十六进制_网络中的数制系统--二进制十六进制与十进制之间的相互转换...
  14. 开发者必备英文网站合集
  15. 云原生 - 阿里云 SLB、CDN、SCDN、DCDN 区别在哪?如何选择?
  16. Cyclone IV E系列介绍
  17. MPEG4与.mp4
  18. 我的世界服务器无法发送聊天信息,我的世界聊天框指令传送 | 手游网游页游攻略大全...
  19. labelme_json_to_dataset报错: ModuleNotFoundError: No module named ‘labelme
  20. windows设置某应用开机自启

热门文章

  1. 工具 | 分享一个好用的绘图工具
  2. 审稿人给出的论文写作建议
  3. 在python内置集成开发环境中可使用快捷键什么_2020知道智慧树普通话训练与测试题库及答案...
  4. 解密——i米音标!!!
  5. 九州通小贴士 - 《做一只飞舞的蜻蜓》
  6. 酷派一芯多用 顶端实惠且移动联通适配
  7. sql中的for update
  8. JAVA多线程实现和应用总结
  9. 实战Windows Azure:微软云计算平台技术详解
  10. 【discuz】discuz模板语法