首页 文章

Hyperledger fabric 1.2服务发现错误

提问于
浏览
0

我使用Hyperledger Fabric 1.2构建一个区块链集群,其中包含3个对等体和3个orderers . 我可以通过CLI和Java SDK成功部署和调用链代码 . 一切正常 . 但是,当我注意到服务发现功能并尝试使用它时,我遇到了两个问题 . 首先,在我构建了发现工具并尝试使用它来获取一些已发现的信息之后,我无法访问对等体并获得如下消息

“连接到发现服务失败:无法创建新连接:超出上下文截止时间”

config命令是

discover --configFile conf.yaml --userKey ./crypto-config/peerOrganizations/org1.forchain.com/peers/peer0.org1.forchain.com/msp/keystore/7458b29b1fb6a89768585430dbf0e522a40ff4aefe600fc1e4fafe62c3c972e4_sk --userCert ./crypto-config/peerOrganizations /org1.forchain.com/peers/peer0.org1.forchain.com/msp/signcerts/peer0.org1.forchain.com-cert.pem --MSP Org1MSP saveConfig

查询命令是

discover --configFile conf.yaml peers --channel lajiao --server localhost:6051

我想这可能是由TLS配置引起的,所以我取消了TLS并再次尝试 . 这次我成功访问了同行并获得了一些消息,但我遇到了另一个问题 . 当我使用'discover peers xxx '命令时,我总是得到 null 结果,实际上该通道中有两个对等体 . 当我使用 'discover endorsers xxx' 命令时,我总是收到以下错误消息

'构造链码的描述符失败:'

在此期间,对等日志输出以下消息:

'主要集计算失败:代码策略要求的足够组织上没有安装链代码2018-08-01 10:21:50.860 UTC [发现] chaincodeQuery - > ERRO 1441构造链代码链代码的描述符失败:,:chaincode isn安装在认可政策要求的足够组织上

我可以确保链代码已成功安装在所有对等方中 . 当我实例化链码时,我没有使用认可政策 . 我认为这不是政策问题,因为我仍然可以调用链码并提出交易 . 我还尝试使用Java SDK,发现我可以获取orderer节点信息,但我无法获得其他对等节点或链代码信息 . 日志始终输出:“发现链代码名称为空 . ” . 但是链代码肯定是实例化的,可以通过SDK调用 . 我参考了“org.hyperledger.fabric.sdkintegration.ServiceDiscoveryIT”中的测试代码,一些关键的Java代码如下:

channel.addPeer(peer, createPeerOptions().setPeerRoles(EnumSet.of(Peer.PeerRole.SERVICE_DISCOVERY,Peer.PeerRole.LEDGER_QUERY, Peer.PeerRole.EVENT_SOURCE,Peer.PeerRole.CHAINCODE_QUERY)));
channel.initialize();
System.out.println("================ orderer ===============");
for (Orderer orderer : channel.getOrderers()) {
    System.out.println(orderer.getName());
}
System.out.println("================ peer ===============");
for (Peer p: channel.getPeers()) {
    System.out.println(p.getName());
}
System.out.println("================ chaincode ===============");
for (String s: channel.getDiscoveredChaincodeNames()) {
    System.out.println(s);
}

那么,我如何在TLS配置下使用'discover'命令,如何获取发现的信息?

1 回答

  • 0

    对于config命令 - 您需要通过 --peerTLSCA 传递TLS根CA.请查看documentation中的示例并采取相应措施 .

    现在 - 对于第二个问题,我认为同伴可能不会在 Channels 中相互认识 .

    • 确保在通道中定义了锚点对等体,并且两个对等体都配置了外部 endpoints .

    • 如果你're struggling for too long and can'解决问题,请随时在chat.hyperledger.org上告诉我(yacovm) .

相关问题