RocketMQ的角色介绍
Producer :消息的发送者Consumer :消息接收者;Broker :暂存和传输消息;NameServer :管理 Broker ;Topic :区分消息的种类;一个发送者可以发送消息给一个或者多个 Topic ;一个消息的接收者可以订阅一个或者多个Topic 消息Message Queue :相当于是 Topic 的分区;用于并行发送和接收消息
NameServer:无状态节点,可集群部署,节点间无信息同步。Broker:mater:slave一对多,通过指定相同的BrokerName建立关系。
BrokerId为0为master,非0为slave,slave中只有为1的那个可参与读负载。
每个broker与nameServer中所有节点建立长连接,定时注册topic信息上去。
Producer: 与nameServer中随机一个节点建立长连接,定期获取topic路由信息,并与提供topic服务的master建立长连接,定时发送心跳。 无状态,可集群部署。consumer:同producer,另外也会与slave建立长连接和发送心跳。
可以从master或slave订阅消息,如果是master,则master会根据最大偏移量和拉取偏移量对比,(判断是否读取老消息,老消息已持久化,会产生IO),以及slave是否可读等,建议下一次从master还是slave拉取。
- 启动NameServer,监听端口,等待broker、producer、consumer的连接, 相当于一个路由控制中心。
- broker启动与NameServer建立连接,定时发送心跳包(包含broker信息:ip、port、存储的所有topic信息)。
- 手动创建topic,指明要存储在那些broker上(也可以发送消息时候创建)
- producer发消息,启动时先与一台NameServer建立长连接,并获取到要发送的topic在哪些broker,轮询选择一个队列,与所在的broker建立长连接并发送消息。
- consumer启动与producer类似。