RocketMQ 架构中的九个组件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/he37176427/article/details/88849219

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

二、remoting 用netty写的客户端和服务端,fastjson做的序列化。自定义二进制协议

三、srvutil 只有一个ServerUtil类 只提供Server程序依赖,目的是为了拆解客户端依赖,尽可能减少客户端依赖

四、store 存储服务。消息存储、索引存储、commitLog存储

五、client 客户端。包含producer端和consumer端,发送消息和接受消息的过程,API

六、filtersrv 消息过滤器server,现在rocketmq的wiki上有示例代码及说明

七、broker 对consumer和producer来说是服务端,接受producer发来的消息并存储,同时consumer来这里拉取消息

八、tools 命令行工具

九、namesrv NameServer,类似SOA服务的注册中心,这里保存着消息的TopicName,队列等运行时的meta信息,一般系统分dataNode和nameNode,这里是nameNode。


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


rocketmq-namesrv模块介绍

  • namesrv扮演着namenode角色,记录运行时消息相关的meta信息,以及broker和filtersrv运行时信息,可以部署集群。
  • 可以把namesrv理解成一个轻量级的zookeeper,他比zookeeper性能更好,可靠性更强。
  • namesrv主要是节点之间相互进行心跳检测、数据通信、集群高可靠性、一致性、容错性等方面的核心模块。
  • namesrv的底层通信机制与netty进行联系,上层通信与各个模块产生强一致性的对应关系,当broker,producer,consumer都运行后,namesrv一共有8类线程
  1. 守护线程:本质是ChannelEventListener,监听broker的channel变化来更新本地的routeInfo
  2. 定时任务线程:NSScheduledThread1 定时跑两个任务,第一个是每隔十分钟扫描不活动的broker,然后从routeinfo中删除;第                           二个是每隔十分钟打印configTable信息
  3. netty的boss线程:netty的Accept线程 这里只有一个线程
  4. nettyEventExecutor线程:一个单独的线程,监听nettyChannel状态变化来通知channelEventListener来做相应的动作
  5. DestroyJavaVM线程:Java虚拟机析构钩子,一般当虚拟机关闭时用来清理或释放资源
  6. Work线程:netty的work线程(IO线程),这里可能有多个线程
  7. Handler线程:执行channelHandler方法的线程,ChannelHandler运行在该线程上,可能有多个。
  8. RomotingExecutorThread线程:服务端逻辑线程,可能有多个

rocketmq-broker模块介绍

是数据存储的核心,也是真正的MQ服务器。我们所谓的消息存储、接受、拉取、推送操作都是在broker上进行的


rocketmq-filtersrv模块介绍

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

在使用时也要启动filter服务

猜你喜欢

转载自blog.csdn.net/he37176427/article/details/88849219
今日推荐