a、Broker分为Master与Slave b、Master和Slave是1对多的关系 c、Master和Slave对应关系通过指定相同的BrokerName; BorkerId=0表示Master,BorkerId=1表示Slave d、Master也可以部署多个 e、brokerId=1参与消息的读负载
每个Broker与NameServer集群中的所有节点建立长连接 定时注册Topic信息到所有NameServer
索引服务
根据特定的Message key对投递到Broker的消息进行索引服务 以提供消息的快速查询
部署架构
组件启动流程
Producer与NameServer集群中的其中一个节点(随机选择) 建立长连接 定期从NameServer获取Topic路由信息
生产者向提供Topic 服务的Master建立长连接 且定时向Master发送心跳
消费者
Consumer与NameServer集群中的其中一个节点(随机选择)建立长连接 定期从NameServer获取Topic路由信息
a、消费者向提供Topic服务的Master、Slave建立长连接 且定时向Master、Slave发送心跳 b、Consumer既可以从Master订阅消息,也可以从Slave订阅消息
集群工作流程
服务注册
a、启动NameServer,NameServer起来后监听端口 等待Broker、Producer、Consumer连上来 相当于一个路由控制中心 b、Broker启动 跟所有的NameServer保持长连接 定时发送心跳包 心跳包中包含当前Broker信息(IP+端口等)以及存储所有Topic信息 注册成功后 NameServer集群中就有Topic跟Broker的映射关系
创建topic
收发消息前 先创建Topic 创建Topic时需要指定该Topic要存储在哪些Broker上 也可以在发送消息时自动创建Topic
生产消息
Producer发送消息 启动时先跟NameServer集群中的其中一台建立长连接 并从NameServer中获取当前发送的Topic存在哪些Broker上 轮询从队列列表中选择一个队列 然后与队列所在的Broker建立长连接从而向Broker发消息
消费消息
Consumer跟Producer类似 跟其中一台NameServer建立长连接 获取当前订阅Topic存在哪些Broker上 然后直接跟Broker建立连接通道 开始消费消息