组件说明
- Producer: 通过MQ的负载均衡模块选择相应的Broker集群队列进行消息注册
- Consumer: 消息消费者,负责消费消息。一个消息消费者会从Broker服务器中获取到消息,并对消息进行相关业务处理。
- NameServer: 理解成注册中心
- Broker: 用来存储消息的,生产者发送来的消息,同时为消费者的拉取请求作准备。
关于Broker,在RocketMQ是以主从方式来构建的,通过集群进行横向扩展。
每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic信息到所有NameServer。

工作流程

- 启动NameServer,NameServer启动后开始监听端口,等待Broker、Producer、Consumer连接。
- 启动Broker时,Broker会与所有的NameServer建立并保持长连接,然后每30秒向NameServer定时发送心跳包。
- 发送消息前,可以先创建Topic,创建Topic时需要指定该Topic要存储在哪些Broker上,当然,在创建Topic时也会将Topic与Broker的关系写入到NameServer中。不过,这步是可选的,也可以在发送消息时自动创建Topic。
- Producer发送消息,启动时先跟NameServer集群中的其中一台建立长连接,并从NameServer中获取路由信息,即当前发送的Topic消息的Queue与Broker的地址(IP+Port)的映射关系。然后根据算法策略从队选择一个Queue,与队列所在的Broker建立长连接从而向Broker发消息。当然,在获取到路由信息后,Producer会首先将路由信息缓存到本地,再每30秒从NameServer更新一次路由信息。
- Consumer跟Producer类似,跟其中一台NameServer建立长连接,获取其所订阅Topic的路由信息,然后根据算法策略从路由信息中获取到其所要消费的Queue,然后直接跟Broker建立长连接,开始消费其中的消息。Consumer在获取到路由信息后,同样也会每30秒从NameServer更新一次路由信息。不过不同Producer的是,Consumer还会向Broker发送心跳,以确保Broker的存活状态。
参考说明
www.bilibili.com/video/BV1cf…