@Java讲坛杨工
RocketMQ是阿里巴巴的一种开源的分布式消息中间件。其高可靠、高可用、高并发、低延迟的特性,近年来被越来越多的企业使用。
RocketMQ的哪些特点吸引大量开发人员阅读其源码
- 其开发语言是Java,降低了Java开发人员阅读的门槛;
- 相比市面上其它的消息中间件,其经历过多次阿里巴巴双十一这种巨型工程的洗礼,能够生存下来,这一点就特别吸引大家想一探究竟,到底是什么样的设计逻辑造就了这么高大上的作品的。
有必要通读源码吗
如果对自己有更高的要求,那必须真正的去阅读源码,深入缕清其内部代码逻辑与设计思路。机会总是留给有准备的人,企业需要的正是具有某方面技能的专家。所以通读源码,也是给自己镀金,延长职场生涯、提高行业竞争力的方式。
RocketMQ必须要掌握的4个角色
RocketMQ的整体架构中,这四个角色NameServer、Broker、Producer、Consumer占据重要地位。它们之间的联系如下:
- NameServer:服务注册中心。主要包含两个功能:一个是Broker管理,NameServer接收来自Broker集群的注册信息并提供心跳来检它们是否可用;另一个是路由管理,每一个NameServer都持有关于Broker集群和队列的全部路由信息,提供给Producer和Consumer查询。
- Broker:消息服务器,负责接收并存储来自Producer产生的消息,然后让Consumer来消费存储起来的消息,并会把自己的topic配置信息实时同步到NameServer上。
- Producer:生产者,负责产生消息。Producer通过NameServer获取所有Broker的路由信息,根据topic找到对应的Broker,然后向Broker发送消息。
- Consumer:消费者,负责消费消息。Consumer通过NameServer获取所有Broker的路由信息,根据topic找到对应的Broker,然后从Broker消费消息。
从GitHub下载RocketMQ源码到IEDA中
最后下载到IEDA中的项目结构如下图所示:
源码目录说明:
- acl:存放访问控制,包含用户、资源、权限、角色等信息。
- broker:存放消息服务器模块。
- client:消息客户端,消息生产者和消费者相关的类就在此包下。
- common:存放所有模块用到的公共工具包。
- dev:存放开发者信息。
- distribution:部署实例文件夹。
- docs:存放各个模块的文档和流程说明书。
- example:存放示例代码的包。
- filter:存放消息过滤相关类的包。
- logappender:存放日志实现相关类的包。
- namesrv:存放服务注册中心相关的类。
- openmessaging:存放消息开放的标准。
- remoting:存放远程通信模块,基于Netty。
- srvutil:存放服务器工具类。
- store:存放消息存储实现的相关类。
- style:存放checkstyle相关实现。
- test:存放测试相关的类。
- tools:存放工具类、监控命令相关的实现类。
用Rocket的四大主要角色模拟消息的生产与消费
1、首先设置NameServer模块
- 设置启动方式
- 新建目录rocketmq-file,然后在目录下再新建conf、logs、store
- 再把项目的子模块distribution下的broker.conf、logback_broker.xml、logback_namesrv.xml复制到上面新建的conf目录下
- 编辑broker.conf,添加如下内容:
# 存储路径storePathRootDir=E:mallocketmq-filestore# commitlog存储路径storePathCommitLog=E:mallocketmq-filestorecommitlog# 消费队列存储路径storePathConsumeQueue=E:mallocketmq-filestorecomsumequeue# 消息索引存储位置storePathIndex=E:mallocketmq-filestoreindex# checkpoint文件存储位置storeCheckPoint=E:mallocketmq-filestorecheckpoint# abort文件存储位置abortFile=E:mallocketmq-filestoreabortnamesrvAddr=127.0.0.1:9876
- 编辑logback_broker.xml和logback_namesrv.xml,把自定义的日志输出目录添加进去
- 此时,启动NameServer就能成功。
2、跟设置NameServer一样,设置Broker模块信息如图所示:
然后启动Broker模块
3、使用RocketMQ源码提供的消息生产者Producer和消费者Consumer案例代码
打开消息生产者Producer.java类,添加设置NameServer服务器地址的代码:
producer.setNamesrvAddr("127.0.0.1:9876");
打开消息消费者Consumer.java类,添加设置NameServer服务器地址的代码:
consumer.setNamesrvAddr("127.0.0.1:9876");
分别启动Producer.java和Consumer.java类中的main方法,在控制台就能够看见消息的产生和消费结果,都是OK的。
到此,RocketMQ消息中间件的初步环境已搭建好。下章开始分析源码。
作者:杨工,北京互联网公司在职Java开发,专注分享写作干货。欢迎关注我,期待你的点赞评论。