本文主要描述使用Idea获取rocketMQ源码及源码的读取。

在演示搭建源码环境前,先简要描述一下RocketMQ的设计目标。

1、架构模式

  和大多数消息中间件一样,采用的是发布订阅模式,基本组件包括:消息发送者、消息服务器(消息存储)、消息消费和路由发现

2、顺序消息

  rocketMQ保证严格的顺序消息(消息到达服务器的时间)

3、消息过滤

  rocketMQ既支持在broker端的消息过滤,也支持在消费端的消息过滤

4、消息存储

  rocketMQ引入了内存机制,保证消息存储的高性能;同时将所有的topic数据存在一个文件中,保证查找消息的高效率;同时为了避免文件积累,引入了文件过期机制和存储空间报警机制。

5、消息高可用

  rocketMQ使用同步刷盘保证了异常宕机情况下数据不丢失,异步刷盘可能有少量数据丢失;单点故障情况,如果开启异步复制机制,则能保证只丢少量数据;后续会引入双写机制,以满足可靠性极高的场合。

6、消息到底低延迟

  RocketMQ在不发生消息堆积时,以长轮询模式实现准实时的消息推送模式。

7、确保消息必须被消费一次

  通过消息消费确认机制(ACK)来确保消息至少被消费一次(由于ACK信息可能会丢失等原因,所以rocket MQ无法做到准确的只被消费一次,因此有可能会有重复消费的可能)

8、回溯消息

  rocketMQ支持按时间的消息回溯(已经被消费的数据,可以重新进行消费),可以精确到毫秒

9、消息堆积

  rocketMQ使用的是磁盘存储,同时使用了内存映射机制,并且存储的物理文件为多个大小相等的逻辑文件,只要磁盘够大,就可以无限存储(实际上,如第4点所述,rocketMQ还提供了文件过期机制和存储空间报警机制,默认保留3天)

10、定时消息

  定时消息实际就是不立即消费的消息,到达一定时间后才会被消费,rocketMQ不支持任意进度的定时消息,而只zhi'chi特定的延迟级别(这是因为特定的延迟级别会有对应的队列)

11、消息重试机制

  消息如果被消费失败,则会重新投递消息

然后就是搭建阅读源码环境

1、获取源码

  VCS  -->  Checkout from Version Control  --> Git

输入git地址:https://github.com/apache/rocketmq.git ,由于我是将项目fork到我本人的gitHub目录下,所以我这里添加我自己的git地址:https://github.com/menglongdeye/rocketmq.git

gitHub  reocketMQ项目地址:https://github.com/apache/rocketmq

然后选择Maven

直接下一步

勾选JDK8,下一步

继续下一步

继续下一步

完成

编辑和下载依赖包

RocketMQ核心目录说明:

(1)acl:访问控制,包含用户、资源、权限、角色等信息。

(2)broker:broker模块(broker启动进程)

(3)client:消息客户端,包含消息生产者、消费者相关类

(4)common:公共包

(5)dev:开发者信息(非源码)

(6)distribution:部署实例文件夹(非源码)

(7)docs:存储对各个模块的说明和一些流程图片,分为中文和英文两种语音描述

(8)example:示例代码

(9)filter:消息过滤基础类

(10)logappender:日志实现相关类

(11)namesrv:namesrv相关实现类(NameSrv启动进程)

(12)openmessaging:消息开放标准

(13)remoting:远程通信模块,基于Netty

(14)srvutil:服务器工具类

(15)store:消息存储实现类相关

(16)style:checkstyle相关实现

(17)test:测试相关类

(18)tools:工具类,监控命令相关实现类

2、调试源码

启动nameSrv

配置ROCKETMQ_HOME

name 为 ROCKETMQ_HOME, value为源码保存路径(与源码目录同层级)

在 ROCKETMQ_HOME创建 conf、logs、store三个文件夹

将distribution项目中broker.conf、logback_namesrv.xml和logback_broker.xml复制到刚才创建的conf文件夹下。

修改broker.conf配置文件,新增以下配置项

# 存储路径
storePathRootDir=D:\\workSpace\\store
# commitlog存储路径
storePathCommitLog=D:\\workSpace\\store\\commitlog
# 消费队列存储路径
storePathConsumeQueue=D:\\workSpace\\store\\comsumequeue
# 消息索引存储位置
storePathIndex=D:\\workSpace\\store\\index
# checkpoint文件存储位置
storeCheckPoint=D:\\workSpace\\store\\checkpoint
# abort文件存储位置
abortFile=D:\\workSpace\\store\\abort namesrvAddr=127.0.0.1:9876

启动namesrv,当输出 The Name Server boot success. serializeType=JSON 时,说明启动成功。

3、启动broker

配置ROCKETMQ_HOME和broker配置文件

启动成功(会显示链接nameSrv的地址)

4、使用rocketmq提供的样例发送消息和消费消息

(1)发送消息

更改example\src\main\java\org\apache\rocketmq\example\quickstart\Producer.java 中 namesrv地址

启动

(2)消费消息

  启动D:\workSpace\rocketMQ\example\src\main\java\org\apache\rocketmq\example\quickstart\Consumer.java(需要配置namesrv地址)

可以看到消息消费成功。

深入理解RocketMQ(一)---阅读源码准备的更多相关文章

  1. 阅读源码(III)

    往期系列: <由阅读源码想到> <由阅读源码想到 | 下篇> Medium上有一篇文章Why You Don't Deserve That Dream Developer Jo ...

  2. 阅读源码(IV)

    往期系列: <由阅读源码想到> <由阅读源码想到 | 下篇> <阅读源码(III)> Eric S.Raymond的写于2014年的<How to learn ...

  3. How Tomcat works — 一、怎样阅读源码

    在编程的道路上,通过阅读优秀的代码来提升自己是很好的办法.一直想阅读一些开源项目,可是没有合适的机会开始.最近做项目的时候用到了shiro,需要做集群的session共享,经过查找发现tomcat的s ...

  4. Java工程师阅读源码的一些见解

    一.为何阅读源码 就是说,通过阅读源码能给你带来什么好处. 学习如何从需求-设计-实现,开阔你的思维,提升你的架构设计能力: 帮助更好地理解原理和架构设计: 帮助更快地定位线上问题BUG 可以根据自己 ...

  5. 阅读源码,从ArrayList开始

    前言 为啥要阅读源码?一句话,为了写出更好的程序. 一方面,只有了解了代码的执行过程,我们才能更好的使用别人提供的工具和框架,写出高效的程序.另一方面,一些经典的代码背后蕴藏的思想和技巧很值得学习,通 ...

  6. 从SpringBoot启动,阅读源码设计

    目录 一.背景说明 二.SpringBoot工程 三.应用上下文 四.资源加载 五.应用环境 六.Bean对象 七.Tomcat服务 八.事件模型 九.配置加载 十.数据库集成 十一.参考源码 服务启 ...

  7. 【转】使用 vim + ctags + cscope + taglist 阅读源码

    原文网址:http://my.oschina.net/u/554995/blog/59927 最近,准备跟学长一起往 linux kernel 的门里瞧瞧里面的世界,虽然我们知道门就在那,但我们还得找 ...

  8. Spring源码解析——如何阅读源码(转)

    最近没什么实质性的工作,正好有点时间,就想学学别人的代码.也看过一点源码,算是有了点阅读的经验,于是下定决心看下spring这种大型的项目的源码,学学它的设计思想. 手码不易,转载请注明:xingoo ...

  9. Spring源码解析——如何阅读源码

    最近没什么实质性的工作,正好有点时间,就想学学别人的代码.也看过一点源码,算是有了点阅读的经验,于是下定决心看下spring这种大型的项目的源码,学学它的设计思想. 手码不易,转载请注明:xingoo ...

随机推荐

  1. Rocket - util - GenericParameterizedBundle

    https://mp.weixin.qq.com/s/vf0PfjbxQ3Ywjk6tk85SfA   介绍GenericParameterizedBundle的实现.   ​​   1. 基本介绍 ...

  2. DataGuard VS Beedup & GoldenGate灾备方案参数对比

    世上本无完美产品,只有合适的才是最好的! 用户重视灾备数据站点的建设,毋庸置疑必备品.如果考虑带宽及事务完整性保证,存储灾备和操作系统级灾备局限性显而易见. 商用价值一般用于解决数据库自带辅助功能的短 ...

  3. QTI EAS学习之find_energy_efficient_cpu

    Energy Awareness Scheduler是由ARM和Linaro开发的新的linux kernel调度器. 原先CFS调度器是基于policy进行调度,并有不同的吞吐量.例如,有一个新的t ...

  4. Java实现 蓝桥杯 算法训练 递归求二项式系数

    算法训练 6-1 递归求二项式系数值 时间限制:10.0s 内存限制:256.0MB 问题描述 样例输入 一个满足题目要求的输入范例. 3 10 样例输出 与上面的样例输入对应的输出. 数据规模和约定 ...

  5. Java实现 蓝桥杯VIP 算法训练 麦森数

    算法训练 麦森数 时间限制:1.0s 内存限制:256.0MB 问题描述 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底, ...

  6. java实现最大镜像子串

    ** 最大镜像子串** [代码填空](满分12分) 串"abcba"以字母"c"为中心左右对称:串"abba" 是另一种模式的左右对称.这两 ...

  7. Java实现打印回型嵌套

    *********** * * * ******* * * * * * * * *** * * * * * * * * * * *** * * * * * * * ******* * * * **** ...

  8. Java培训Day02——制作疫情地图(一)

    一.前言 此次培训,是为期三天的网上培训.最终的目的是制作出疫情地图.首先我们来看看主要的讲课内容大纲. Day1 |-Java语法学习(个人感觉讲得还可以,主要围绕本次培训作出的讲解,没有像网上的基 ...

  9. Python3.7解释器+sublime Text3编辑器+案例打包软件+Python语言程序设计基础教材

    编辑器:https://nsyw.lanzous.com/i7lcdyh Python3.7 https://nsyw.lanzous.com/i7a299c 案例 https://nsyw.lanz ...

  10. Springboot 的单元测试

    1 测试基础类 @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment. ...