lwclover opened a new pull request, #4383:
URL: https://github.com/apache/rocketmq/pull/4383
### RocketMQ同机房就近生产和消费机制。
RocketMQ注册、发现机制
- Broker
-
间隔30秒发送broker上的Topic全量信息到所有Nameserv。broker启动的时候也是延迟注册到Namesrv上的。当有topic发生变更时TopicConfigManager.dataVersion发生变更。
-
当有topic创建和更新时,broker立刻发送Topic增量信息到所有Namesrv。同时触发Namesrv的BrokerLiveInfo.dataVersion发生变更。
- Namesrv
- 保存集群和broker关系、broker信息(brokerName和地址)、broker真实连接和topic版本号,topic信息。
- 调度线程每10秒钟检查一次,如果发现一个broker 120秒都没有更新注册信息,则删除和这个broker相关的所有信息。
- Producer&Consumer
- Producer第一次发送Message时,会同步向namesrv请求topic路由信息
- Consumer启动过程中会向namesrv请求topic路由信息
- 每隔30秒向namesrv拉取一次topic路由信息,根据路由信息内容(不是版本号)判断是否变化,发生变化更新
- 总结:
Producer第一次发送消息时会同步向namesrv请求topic路由信息,然后默认轮询往每个Queue发送消息。
Consumer启动时获取topic路由信息,然后请求broker获取consumer实例列表,最后根据consumer的数量和负载均衡算法给consumer分配queue。
### 实现rocketmq同机房就近生产和消费:
对于Producer,当开启同机房优先策略时,访问namesrv获取路由信息时根据Producer的网络获取同机房的路由信息。
对于Consumer,当开启同机房优先策略时,consumer启动时请求namesrv根据consumer网络获取到同机房的路由信息。
如果Producer或者Consumer的地址不属于任何一个机房时默认返回所有的路由信息。


--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]