我们现在来正式开始看NameServer的启动流程的源码,首先我们昨天已经讲到,NamesrvStartup这个类的main()方法会被执行,然后执行的时候实际上会执行一个main0()这么个方法,如下所示。
在上面的源码中,我们会注意到这么一行代码:
NamesrvController controller = createNamesrvController(args);
这行代码很明显,就是在创建一个NamesrvController类,这个类似乎是NameServer中的一个核心组件。我们可以大胆的推测一下,NameServer启动之后,是不是需要接受Broker的请求?因为Broker都要把自己注册到NameServer上去。
然后Producer这些客户端是不是也要从NameServer拉取元数据?因为他们需要知道一个Topic的MessageQueue都在哪些Broker上。所以我们完全可以猜想一下,NamesrvController这个组件,很可能就是NameServer中专门用来接受Broker和客户端的网络请求的一个组件!因为平时我们写Java Web系统的时候,大家都喜欢用Spring MVC框架,在Spring MVC框架中,用于接受HTTP请求的,就是Controlller组件!
所以我们看下面的图,大家可以先推测一下,NamesrvController组件,实际上就是NameServer中的核心组件,用来负责接受网络请求的!