在new Bootstrap().setup()
里实现了instance的初始化,其中主要一步是Node的new,在Node的构造函数当中,将很多module也挂靠上去了。下面简单看看DiscoveryModule
模块。

DiscoveryModule模块有2类,一个本地版/JVM版local
,一个集群版zen
。
LocalDiscovery
里面有几个重要的field,分别是ClusterService
,RoutingService
,ClusterState
。自成master,final LocalDiscovery master = firstMaster
。其中startInitialJoin
用于启动触发,publish
是master用于下发集群变化信息的函数。

主要下发路由信息和元数据信息。
ZenDiscovery
这个模块相比上一个模块多了集群分布式的功能,如,TransportService
、MasterFaultDetection
、MembershipAction
、JoinThreadControl
等。
其中,集群模式下的master节点查找功能如下,
new JoinThreadControl(threadPool)
-> innerJoinCluster
-> findMaster()
-> electMaster()
-> sortedMasterNodes()
-> membership.sendJoinRequestBlocking


网友评论