Hyperledger fabric 源码分析之 peer 服务启动过程
来源:互联网 发布:淘宝最晚几天确认收货 编辑:程序博客网 时间:2024/05/21 06:25
peer 服务是主服务。
该服务支持各种 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,还会打开监听服务。
阅读全文
0 0
- Hyperledger fabric 源码分析之 peer 服务启动过程
- Hyperledger fabric 源码分析之 peer 服务启动过程
- Hyperledger fabric0.6 peer启动过程源码分析
- Hyperledger Fabric继peer启动之后的源码解析一
- Hyperledger Fabric继peer启动之后的源码解析二
- Hyperledger Fabric继peer启动之后的源码解析三
- peer启动过程源码分析
- Hyperledger Fabric 链码启动过程实现
- Hyperledger Fabric 排序节点启动过程
- Hyperledger Fabric处理Peer与Peer之间通信的源码解析
- Hyperledger Fabric 排序服务核心原理和工作过程
- fabric源码解析14——peer的gossip服务之初始化
- fabric源码解析15——peer的gossip服务之散播
- fabric源码解析16——peer的gossip服务之测试
- HyperLedger Fabric:自顶向下的方法--第1篇 编译fabric源码及手工搭建单个Peer节点网络
- Hyperledger Fabric的PBFT源码分析(一)
- fabric源码解析7——peer的ChaincodeSupport服务
- fabric源码解析12——peer的MSP服务
- 跨越问题
- z-index在css中的意思
- 剑指offer-10 旋转数组
- js的作用域问题及简单练习
- 项目中动态修改加载环境配置的几种方式
- Hyperledger fabric 源码分析之 peer 服务启动过程
- 兼容性问题小总结
- linux 下关于Python 调用shell命令的方式
- RabbitMQ之队列
- 随笔,jq children应用,,,获取域名,list应用比较广泛
- es6 基础总结
- 仪器检定、校准区别
- SQL的主键和外键的设置语法
- 一年Android工作经验,阿里 百度 网易 美团 小米 快手面经