1. RocketMQ主要的9个模块,如图:

  

2. 模块介绍

  1. rocketmq-common:通用的常量枚举,基类方法或者数据结构,按描述的目标来分包,通俗易懂。报名有admin,consumer,filter,hook,message等。

  2. rocketmq-remoting:用Netty写的客户端和服务端,fastjson做的序列化,自定义二进制协议

  3. rocketmq-sevutil: 只用一个ServerUtil类,类注解是,只提供Server程序依赖,目的是为了拆解客户端依赖,尽可能减少客户端的依赖

  4. rocketmq-store: 存储服务,消息存储,索引存储,commitLog存储

  5. rocketmq-client: 客户端,包含producer端和consumer端,消息的生产发送和接收消费的过程。

  6. rocketmq-filtersrv: 消息过滤器server

  7. rocketmq-broker: 对consumer和producer来说是服务端,接收producer发来的消息并存储,同时consumer来这里拉取消息。

  8. rocketmq-tools:命令行工具。

  9. rocketmq-namesrv:NameServer,类似zookeeper注册中心,这里保存着消息的TopicName,队列等运行时的meta信息。一般系统分dataNode和nameNode,这里是nameNode。

3. 结构层次说明

  模块依赖:最底层为基础实现,最上层为对外提供的服务模块

  

4. NameServer与Zookeeper

  在rocketmq的早版本(2.x)的时候,是没有namesrv组件的,用的是zookeeper做分布式协调和服务发现,但是后期阿里数据根据实际业务需求进行改进和优化,自组研发了轻量级的namesrv,用于注册Client服务与Broker的请求路由工作,namesrv上不做任何消息的位置存储(频繁操作zookeeper的位置存储数据会影响整体集群性能)

  rocketmq-namesrv模块介绍:

  rocketmq-namesrv扮演着nameNode角色,记录运行时消息相关的meta信息以及broker的filtersrv运行时信息,可以部署集群。

  我们可以吧rocketmq-namesrv理解成一个轻量级的zookeeper,他比zookeeper性能更好,并且比zookeeper的可靠性更强。

  rocketmq-namesrv主要是节点之间相互进行心跳检测,数据通信,集群高可靠性,一致性,容错性等方面的核心模块。

  rocketmq-namesrv的底层通信机制与neetty进行联系,上层通信与各个模块产生强一致性的对应关系,当broker,producer,consumer都运行后,namesrv一共有八类线程,如:守护线程,定时任务线程,netty的boss线程,NettyEventExecuter线程,DestroyJavaJVM线程,Work线程,Handler线程,RemotingExecutorThread线程。

5. 底层通信

  1. ServerHouseKeepingService:守护线程,本质是ChannelEventListener,监听broker的channel变化来更新本地的RouteInfo。

  2. NSScheduledThread1: 定时任务线程,定时跑2个任务,第一个是,每隔十分钟扫描出不活动的broker,然后冲routeInfo中删除,第二个是,每隔十分钟打印configTable的消息。

  3. NettyBossSelector: Netty的boss线程(Accept线程),这里只有一个线程

  4.NettyEventExecuter:一个单独的线程,监听NettyChannel状态变化和通知ChannelEventListener要响应的动作。

  5. DestroyJavaVM:Java虚拟机析构钩子,一般是当虚拟机关闭时用来清理或者释放资源的。

  6. NettyServerSelector_x_x: Netty的Work线程(io)线程,这里可能有多个线程

  7. NettyServerWorkerThread_x:执行ChannelHandler方法的线程,ChannelHandler运行在线程上,这里可能有多个线程。

  8. RemotingExecutorThread_x: 服务端逻辑线程,这里可能有多个线程。rocketmq-namesrv扮演者nameNode角色,记录运行时meta信息已经broker和filtersrv运行时信息,可以部署集群。

6. 数据存储

  rocketmq-broker模块介绍:

  这个是数据存储的核心,也就是真正的MQ服务器,我们所谓的消息存储,接收,拉去,推送这些操作都是在broker上进行的。

  rocketmq-filtersrv:

  在rocketmq中,使用独立的一个模块去对数据进行过滤,实现了真正意义上的高内聚,低耦合的设计思想。

  我们在使用rocketmq-filtersrv模块的时候,也需要启动filter服务。

RocketMQ学习笔记(7)----RocketMQ的整体架构的更多相关文章

  1. 【rocketmq学习笔记】rocketmq入门学习

    基本介绍 rocketmq是阿里巴巴团队使用java语言开发的一款基于发布订阅模型的分布式消息队列中间件,是一款低延迟,高可用,拥有海量消息堆积能力和灵活拓展性的消息队列. 特点 可以实现集群无单点故 ...

  2. RocketMQ学习笔记(16)----RocketMQ搭建双主双从(异步复制)集群

    1. 修改RocketMQ默认启动端口 由于只有两台机器,部署双主双从需要四个节点,所以只能修改rocketmq的默认启动端口,从官网下载rocketmq的source文件,解压后使用idea打开,全 ...

  3. RocketMQ学习笔记(15)----RocketMQ的消息模式

    在前面学习ActiveMQ时,看到ActiveMQ可以是队列消息模式,也可以是订阅发布模式. 同样,在RocketMQ中,也存在两种消息模式,即是集群消费模式和广播消费模式. 1. 集群消费模式 跟A ...

  4. RocketMQ学习笔记(13)----RocketMQ的Consumer消息重试

    1. 概念 Producer端重试: 生产者端的消息失败,也就是Producer往MQ上发消息没有发送成功,比如网络抖动导致生产者发送消息到MQ失败. 这种消息失败重试我们可以手动设置发送失败重试的次 ...

  5. RocketMQ学习笔记(14)----RocketMQ的去重策略

    1. Exactly Only Once (1). 发送消息阶段,不允许发送重复的消息 (2). 消费消息阶段,不允许消费重复的消息. 只有以上两个条件都满足情况下,才能认为消息是“Exactly O ...

  6. RocketMQ学习笔记(4)----RocketMQ搭建双Master集群

    前面已经学习了RockeMQ的四种集群方式,接下来就来搭建一个双Master(2m)的集群环境. 1. 双Master服务器环境 序号 ip 用户名 密码 角色 模式 (1) 47.105.145.1 ...

  7. 《深入理解bootstrap》读书笔记:第二章 整体架构

    一.  整体架构   1. CSS-12栅格系统 把网页宽度均分为12等分(保留15位精度)--这是bootstrap的核心功能. 2.基础布局组件 包括排版.按钮.表格.布局.表单等等. 3.jQu ...

  8. jQuery源码学习(1):整体架构

    整体架构 $().find().css().hide() 从jQuery的表达式可以看出两点: jQuery的构建方式 jQuery的调用方式 下面从这两方面来窥探jQuery的整体架构: 分析一:无 ...

  9. rocketmq ----> 学习笔记

    官网:http://rocketmq.apache.org 1.环境搭建 准备: rocketmq-all-4.3.0-bin-release.zip 必须配置:JAVA_HOME=/home/rui ...

随机推荐

  1. vscode 插件推荐 - 献给所有前端工程师

    VScode现在已经越来越完善.性能远超Atom和webstorm,你有什么理由不用它?在这里,我会给你们推荐很多实用的插件,让你对 vscode 有更深刻的体会,渐渐地你就会知道它有多好用. 走马观 ...

  2. 洛谷P4012 深海机器人问题(费用流)

    题目描述 深海资源考察探险队的潜艇将到达深海的海底进行科学考察. 潜艇内有多个深海机器人.潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动. 深海机器人在移动中还必须沿途采集海底生物标本.沿途生 ...

  3. ONGUI->NGUI->UGUI (Unity UI史)

    各GUI的介绍 ONGUI:Unity自带的绘制界面工具,它的成像原理是基于表层的,所以执行效率非常的低,并且没有提供复杂的UI的接口,就算开发者硬着头皮写上去只能让UI的执行效率更低. NGUI:第 ...

  4. Unity "Build failed : Asset is marked as don't save " 解决方案

    编译到Android时失败,是字体的原因: -- -- 摘自官方论坛排第二但点赞第一的回答. http://answers.unity3d.com/questions/363963/build-fai ...

  5. Unity 动画系统(Mecanim)的组成结构

    三部分: Model Rigging(直译传动装置,术语翻译绑定)(连接Model与Animations) Animations

  6. 数据库过滤操作中 != 或者 <> 指定操作数并不能改匹配到NULL值

    数据库过滤操作中 != 或者 <> 指定操作数并不能改匹配到NULL值

  7. JTree知识小点

    创建一个新节点 DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("新节点"); 被选中的节点 Default ...

  8. Codeforces 185A Plant( 递推关系 + 矩阵快速幂 )

    链接:传送门 题意:输出第 n 年向上小三角形的个数 % 10^9 + 7 思路: 设 Fn 为第 n 年向上小三角形的个数,经过分析可以得到 Fn = 3 * Fn-1 + ( 4^(n-1) - ...

  9. Lvs+heartbeat高可用高性能web站点的搭建

    这是我们公司在实际的生产环境当中使用的一套东西,希望对大家有所帮助(实际的公网ip,我已经做了相应的修改): 说明:每台服务器需要有两块网卡:eth0连接内网的交换机,用私网ip,实现服务器间内部访问 ...

  10. 【codeforces 812B】Sagheer, the Hausmeister

    [题目链接]:http://codeforces.com/contest/812/problem/B [题意] 一个老大爷在一楼; 然后他有n楼的灯要关(最多n楼); 每楼有m个房间; 给出每个房间的 ...