Hyperledger fabric 源码分析之 peer 服务启动过程
2016-08-02 17:25
691 查看
peer 服务是主服务。
该服务支持各种 peer 命令。
包括查询状态,和启动、停止节点服务等。
启动过程在 peer/main.go 中。
最重要的是
当执行
首先是进行配置管理,根据配置信息和一些计算来构建 cache 结构,探测节点信息等。
主要调用 core.peer 包来实现。
之后是启动 grpc 服务,监听到 7051 端口。
创建 EventHub 服务,通过调用 createEventHubServer() 方法来实现,该服务也是 grpc,只有 vp 节点才开启。
启动数据库服务。
启动一个 grpc 服务。
注册 Chaincode 支持服务。
创建 peer 节点服务,注意区分 vp 和 nvp 节点。
分别注册 peer 节点服务、管理服务、devops 服务、openchain 服务等,如果开启 REST,则启动 REST 服务。
最后,启动这些服务的 grpc 服务端,启动 EventHub 的服务端。如果需要 profiling,还会打开监听服务。
更多源码分析,请参考 https://github.com/yeasy/hyperledger_code_fabric。
转载请注明:http://blog.csdn.net/yeasy/article/details/52096267。
该服务支持各种 peer 命令。
包括查询状态,和启动、停止节点服务等。
启动过程在 peer/main.go 中。
serve 函数
最重要的是 func serve(args []string) error函数。
当执行
peer node start命令时候被调用,启动一个节点服务。
首先是进行配置管理,根据配置信息和一些计算来构建 cache 结构,探测节点信息等。
主要调用 core.peer 包来实现。
if err := peer.CacheConfiguration(); err != nil { return err } peerEndpoint, err := peer.GetPeerEndpoint() if err != nil { err = fmt.Errorf("Failed to get Peer Endpoint: %s", err) return err }
之后是启动 grpc 服务,监听到 7051 端口。
listenAddr := viper.GetString("peer.listenAddress") if "" == listenAddr { logger.Debug("Listen address not specified, using peer endpoint address") listenAddr = peerEndpoint.Address } lis, err := net.Listen("tcp", listenAddr)
创建 EventHub 服务,通过调用 createEventHubServer() 方法来实现,该服务也是 grpc,只有 vp 节点才开启。
lis, err = net.Listen("tcp", viper.GetString("peer.validator.events.address")) if err != nil { return nil, nil, fmt.Errorf("failed to listen: %v", err) } //TODO - do we need different SSL material for events ? var opts []grpc.ServerOption if comm.TLSEnabled() { creds, err := credentials.NewServerTLSFromFile(viper.GetString("peer.tls.cert.file"), viper.GetString("peer.tls.key.file")) if err != nil { return nil, nil, fmt.Errorf("Failed to generate credentials %v", err) } opts = []grpc.ServerOption{grpc.Creds(creds)} } grpcServer = grpc.NewServer(opts...) ehServer := producer.NewEventsServer(uint(viper.GetInt("peer.validator.events.buffersize")), viper.GetInt("peer.validator.events.timeout")) pb.RegisterEventsServer(grpcServer, ehServer)
启动数据库服务。
db.Start()
启动一个 grpc 服务。
grpcServer := grpc.NewServer(opts...)
注册 Chaincode 支持服务。
secHelper, err := getSecHelper() if err != nil { return err } secHelperFunc := func() crypto.Peer { return secHelper } registerChaincodeSupport(chaincode.DefaultChain, grpcServer, secHelper)
创建 peer 节点服务,注意区分 vp 和 nvp 节点。
if peer.ValidatorEnabled() { logger.Debug("Running as validating peer - making genesis block if needed") makeGenesisError := genesis.MakeGenesis() if makeGenesisError != nil { return makeGenesisError } logger.Debugf("Running as validating peer - installing consensus %s", viper.GetString("peer.validator.consensus")) peerServer, err = peer.NewPeerWithEngine(secHelperFunc, helper.GetEngine) } else { logger.Debug("Running as non-validating peer") peerServer, err = peer.NewPeerWithHandler(secHelperFunc, peer.NewPeerHandler) }
分别注册 peer 节点服务、管理服务、devops 服务、openchain 服务等,如果开启 REST,则启动 REST 服务。
pb.RegisterPeerServer(grpcServer, peerServer) // Register the Admin server pb.RegisterAdminServer(grpcServer, core.NewAdminServer()) // Register Devops server serverDevops := core.NewDevopsServer(peerServer) pb.RegisterDevopsServer(grpcServer, serverDevops) // Register the ServerOpenchain server serverOpenchain, err := rest.NewOpenchainServerWithPeerInfo(peerServer) if err != nil { err = fmt.Errorf("Error creating OpenchainServer: %s", err) return err } pb.RegisterOpenchainServer(grpcServer, serverOpenchain) // Create and register the REST service if configured if viper.GetBool("rest.enabled") { go rest.StartOpenchainRESTServer(serverOpenchain, serverDevops) }
最后,启动这些服务的 grpc 服务端,启动 EventHub 的服务端。如果需要 profiling,还会打开监听服务。
更多源码分析,请参考 https://github.com/yeasy/hyperledger_code_fabric。
转载请注明:http://blog.csdn.net/yeasy/article/details/52096267。
相关文章推荐
- Hyperledger fabric 源码分析之 peer 服务启动过程
- Hyperledger fabric0.6 peer启动过程源码分析
- Android输入管理服务启动过程源码分析
- Android SurfaceFlinger服务启动过程源码分析
- peer启动过程源码分析
- Android源码解析之新进程中启动自定义服务过程(startService)的原理分析
- Android SurfaceFlinger服务启动过程源码分析1
- 源码分析vxWorks6.x的ARM板BSP启动过程
- Nginx源码分析-启动初始化过程(二)
- Android系统在新进程中启动自定义服务过程(startService)的原理分析 (上)
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- Nginx源码分析---Nginx启动初始化过程(一)
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- nginx源码分析(10)-启动过程分析
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- Android系统在新进程中启动自定义服务过程(startService)的原理分析
- U-Boot的启动过程源码分析(只有思路)
- Android 源码分析 -- (一) Android启动过程