Orderer 节点启动通过 orderer
包下的 main() 方法实现,会进一步调用到 orderer/common/server
包中的 Main()
方法。
核心代码如下所示。
// Main is the entry point of orderer processfunc Main() { fullCmd := kingpin.MustParse(app.Parse(os.Args[1:])) // "version" command if fullCmd == version.FullCommand() { fmt.Println(metadata.GetVersionInfo()) return } conf := config.Load() initializeLoggingLevel(conf) initializeLocalMsp(conf) Start(fullCmd, conf)}
包括配置初始化过程和核心启动过程两个部分:
-
config.Load():从本地配置文件和环境变量中读取配置信息,构建配置树结构。
-
initializeLoggingLevel(conf):配置日志级别。
-
initializeLocalMsp(conf):配置 MSP 结构。
-
Start():完成启动后的核心工作。
整体过程
核心启动过程都在 orderer/common/server
包中的 Start() 方法,如下图所示。
Start() 方法会初始化 gRPC 服务需要的结构,然后启动服务。
核心代码如下所示。
func Start(cmd string, conf *config.TopLevel) { logger.Debugf("Start()") signer := localmsp.NewSigner() manager := initializeMultichannelRegistrar(conf, signer) server := NewServer(manager, signer, &conf.Debug) switch cmd { case start.FullCommand(): // "start" command logger.Infof(