一、RocketMQ简介
Apache RocketMQ 是一个分布式消息和流媒体平台,具有低延迟、高性能和可靠性、万亿级容量和灵活的可扩展性。它由四个部分组成:名称服务器、代理、生产者和消费者。它们中的每一个都可以水平扩展而没有单点故障。
二、RocketMQ架构
官网给出的RocketMQ架构如下:
上图可以看出,RocketMQ分为四大模块
1)NameServer Cluster
提供轻量级服务发现和路由。每个Name Server记录完整的路由信息,提供相应的读写服务,支持快速存储扩展。
2)Broker Cluster
主要负责消息的存储、投递和查询以及服务高可用保证。Brokers 通过提供轻量级的 TOPIC 和 QUEUE 机制来处理消息存储。它们支持 Push 和 Pull 模型,包含容错机制(2 副本或 3 副本),并提供强大的峰值填充和按原始时间顺序累积数千亿消息的能力。此外,Brokers 提供了灾难恢复、丰富的指标统计和警报机制,这些都是传统消息传递系统所缺乏的。
3)Producer Cluster
充当消息发布的角色,支持分布式集群方式部署。producer通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递。投递的过程支持快速失败并且低延迟。
4)Consumer Cluster
充当消息消费者的角色,支持分布式集群方式部署。支持以push推,pull拉两种模式对消息进行消费。同时也支持集群方式和广播形式的消费,它提供实时消息订阅机制,可以满足大多数用户的需求。
三、RocketMQ源码启动
1)导入源码
下载RocketMQ4.9.0,git地址:https://github.com/apache/rocketmq
导入idea,代码结构如下
关注两个重点模块:rocketmq-namesrv以及rocketmq-broker
2)启动namesrv
namesrv提供轻量级服务发现和路由,记录完整的路由信息,实践源码时需要先启动namesrv模块。代码结构如下:
打开NamesrvStartup类文件,首先在createNamesrvController方法中指定RocketmqHome,然后启动main方法
至此,完成namesrv模块启动。
3)启动broker
broker主要负责消息的存储、投递和查询以及服务高可用保证。启动namesrv之后,再启动broker。代码结构如下:
打开BrokerStartup,需要设置brokerConfig的一些信息,然后再启动main方法。
至此,完成broker模块启动。
4)启动producer及consumer
进入example模块,打开quickstart文件夹
先打开Producer类,配置NamesvrAddr,启动Producer类
再打开Consumer类,同样配置NamesvrAddr,再启动Consumer类
producer和consumer需要制定同样的groupName以及topic
producer启动之后,观察consumer类控制台,可以发现能够接收producer信息。