【发布时间】:2018-08-01 10:32:35
【问题描述】:
我使用 Hyperledger Fabric 1.2 构建了一个区块链集群,其中包含 3 个对等节点和 3 个排序节点。我可以通过 CLI 和 Java SDK 成功部署和调用链代码。一切正常。但是,当我注意到服务发现功能并尝试使用它时,我遇到了两个问题。首先,在我构建了发现工具并尝试使用它来获取一些发现的信息后,我无法访问对等点并获取如下消息
"连接发现服务失败:创建新服务失败 连接:超出上下文期限”
配置命令是
discover --configFile conf.yaml --userKey ./crypto-config/peerOrganizations/org1.forchain.com/peers/peer0.org1.forchain.com/msp/keystore/7458b29b1fb6a89768585430dbf0e522a40ff4aefe600fc1e4fafe62c3c972e4_sk --userCert ./crypto /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 并再次尝试。这次我成功访问了peer并收到了一些消息,但是我遇到了另一个问题。当我使用 'discover peers xxx ' 命令时,我总是得到null 结果,实际上该通道中有两个对等点。当我使用'discover endorsers xxx' 命令时,我总是收到以下错误消息
'构造链码描述符失败:'
同时,peer log输出如下信息:
'主体集计算失败:链码未安装 背书政策要求的足够组织 2018-08-01 10:21:50.860 UTC [发现] chaincodeQuery -> ERRO 1441 失败 为链码链码构造描述符: ,: 链码没有安装在足够多的组织上 背书政策”
我可以确保链码已成功安装在所有对等节点中。而且我在实例化链码时没有使用背书策略。我认为这不是政策问题,因为我仍然可以调用链代码并提出交易。 我还尝试使用 Java SDK,发现我可以获取排序节点信息,但无法获取其他对等节点或链码信息。日志始终输出:“发现链代码名称为空。”。但是链码肯定是实例化的,可以通过 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) 用于配置配置文件的命令(如果使用一个),(2) 用于查询对等方的命令。
-
问题已更新
标签: hyperledger-fabric hyperledger service-discovery