RocketMQ(二)——TopicPublicInfo

来源:互联网 发布:金天鹅软件 编辑:程序博客网 时间:2024/06/06 13:20
Producer发送消息是如何得知发到哪个broker的 ? 

每个应用在收发消息之前,一般会调用一次producer.start()/consumer.start(),幕后的工作就是:创建需要的实例对象,如MQClientInstance;设置定时任务,如从Nameserver中定时更新本地的Topic route info,发送心跳信息到所有的broker,动态调整线程池的大小,等等;把当前producer加入到指定的组中。客户端会缓存路由信息TopicPublishInfo, 同时定期从NameServer取Topic路由信息,每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic信息到所有的NameServer。Producer在发送消息的时候会去查询本地的topicPublishInfoTable(一个HashMap),如果没有命中的话就会与NameServer沟通得到路由信息,RequestCode=GET_ROUTEINTO_BY_TOPIC 如果nameserver中也木有查询到,那么将会发送一个default的topic进行路由查询。,如图所示:


Producer发送消息的具体过程,以同步模式为例。 
得到了通信地址,发送过程就显而易见了。可以看到在选择消息队列进行发送时采用随机方式,同时和上一次发送的broker保持不同,防止热点


0 0
原创粉丝点击