RocketMQ自阿里开源以来,一直在Apache下孵化,现在很多互联网公司都在生产环境中使用。当然也是各大科技厂商的面试点。技术架构RocketMQ架构主要分为四个部分,如上图所示:Producer:消息发布的角色,支持分布式集群部署。Producer通过MQ负载均衡模块选择对应的Broker集群队列进行消息传递。交付过程支持快速失败和低延迟。Consumer:消息消费的角色,支持分布式集群部署。它支持推送和拉取两种模式来消费消息。同时还支持集群模式和广播模式消费。它提供了实时的消息订阅机制,可以满足大多数用户的需求。NameServer:NameServer是一个非常简单的主题路由注册中心,其作用类似于Dubbo中的zookeeper,支持Broker的动态注册和发现。主要包括两个功能:Broker管理,NameServer接受Broker集群的注册信息,并保存为路由信息的基础数据。然后提供心跳检测机制,检查Broker是否还活着;路由信息管理,每个NameServer都会保存Broker集群的整个路由信息和队列信息,供客户端查询。然后Producer和Conumser可以通过NameServer知道整个Broker集群的路由信息??,从而进行消息的传递和消费。NameServer通常也部署在集群中,实例之间不通信。Broker向每个NameServer注册自己的路由信息??,因此每个NameServer实例都保存了一个完整的路由信息??。当一个NameServer由于某种原因下线时,Broker仍然可以将自己的路由信息??同步给其他NameServer,Producer和Consumer仍然可以动态感知Broker的路由信息??。BrokerServer:Broker主要负责消息的存储、传递和查询以及服务的高可用保证。Broker为了实现这些功能,包含了以下几个重要的子模块。RemotingModule:整个Broker实体负责处理来自客户端的请求。ClientManager:负责管理客户端(Producer/Consumer),维护Consumer的Topic订阅信息。StoreService:提供方便简单的API接口来处理消息到物理硬盘的存储和查询功能。HAService:高可用服务,提供MasterBroker和SlaveBroker之间的数据同步功能。IndexService:根据特定的Messagekey,对传递给Broker的消息进行索引,提供消息的快速查询。
