Hyperledger Fabric继peer启动之后的源码解析一

本文详细解析了Hyperledger中Peer节点的配置过程,特别是CacheConfiguration函数的作用及其实现细节,包括如何自动检测本地地址、配置PeerEndpoint等。

对图中peer节点启动之后的peer address 172.17.0.3:7051灰色部分的的代码提取分析,7051:peer gRPC 服务监听端口。下面是Hyperledger中相关监听的服务端口

默认包括:以下监听的服务端口对应hyperledger0.6版本,与其他版本无关。

7050: REST 服务端口

7051:peer gRPC 服务监听端口

7052:peer CLI 端口

7053:peer 事件服务端口

7054:eCAP7055:eCAA

7056:tCAP

7057:tCAA

7058:tlsCAP

7059:tlsCAA

图中的CacheConfiguration()这个函数到底做了什么?请看下面

// CacheConfiguration计算和缓存经常使用的常量且计算常量做为包变量,按照惯例前面的全局变量

// 已经被嵌入在这里为了保留原始的抽象状态
func CacheConfiguration() (err error) {
    // getLocalAddress 返回正在操作的本地peer的address:port,受到env:peer.addressAutoDetect的影响
    getLocalAddress := func() (peerAddress string, err error) {
        if viper.GetBool("peer.addressAutoDetect") {
            // 需要从peer.address设置中获取端口号,并将其添加到已经确定的主机ip后
            _, port, err := net.SplitHostPort(viper.GetString("peer.address"))
            if err != nil {
                err = fmt.Errorf("Error auto detecting Peer's address: %s", err)
                return "", err
            }
            peerAddress = net.JoinHostPort(GetLocalIP(), port)
            peerLogger.Infof("Auto detected peer address: %s", peerAddress)
        } else {
            peerAddress = viper.GetString("peer.address")
        }
        return
    }

    // getPeerEndpoint 对于这个Peer实例来说,返回PeerEndpoint,受到env:peer.addressAutoDetect的影响
    getPeerEndpoint := func() (*pb.PeerEndpoint, error) {
        var peerAddress string
        var peerType pb.PeerEndpoint_Type
        peerAddress, err := getLocalAddress()
        if err != nil {
            return nil, err
        }
        if viper.GetBool("peer.validator.enabled") {
            peerType = pb.PeerEndpoint_VALIDATOR
        } else {
            peerType = pb.PeerEndpoint_NON_VALIDATOR
        }
        return &pb.PeerEndpoint{ID: &pb.PeerID{Name: viper.GetString("peer.id")}, Address: peerAddress, Type: peerType}, nil
    }

    localAddress, localAddressError = getLocalAddress()
    peerEndpoint, peerEndpointError = getPeerEndpoint()

    syncStateSnapshotChannelSize = viper.GetInt("peer.sync.state.snapshot.channelSize")
    syncStateDeltasChannelSize = viper.GetInt("peer.sync.state.deltas.channelSize")
    syncBlocksChannelSize = viper.GetInt("peer.sync.blocks.channelSize")
    validatorEnabled = viper.GetBool("peer.validator.enabled")

    securityEnabled = viper.GetBool("security.enabled")

    configurationCached = true

    if localAddressError != nil {
        return localAddressError
    } else if peerEndpointError != nil {
        return peerEndpointError
    }
    return
}

// cacheConfiguration如果检查失败打一个错误日志
func cacheConfiguration() {
    if err := CacheConfiguration(); err != nil {
        peerLogger.Errorf("Execution continues after CacheConfiguration() failure : %s", err)
    }
}
// GetPeerEndpoint 从缓存配置中返回peerEndpoint
func GetPeerEndpoint() (*pb.PeerEndpoint, error) {
    if !configurationCached {
        cacheConfiguration()
    }
    return peerEndpoint, peerEndpointError
}

// cacheConfiguration如果检查失败打一个错误日志
func cacheConfiguration() {
    if err := CacheConfiguration(); err != nil {
        peerLogger.Errorf("Execution continues after CacheConfiguration() failure : %s", err)
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

The_Web3_社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值