Hyperledger fabric 1.2服务发现错误

问题描述 投票:1回答:3

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

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

config命令是

发现--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

查询命令是

发现--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'命令,如何获取发现的信息?

hyperledger-fabric hyperledger service-discovery
3个回答
0
投票

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

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

  1. 确保在通道中定义了锚点对等体,并且两个对等体都配置了外部端点。
  2. 如果你挣扎太久并且无法解决问题,请随时在chat.hyperledger.org上告诉我(yacovm)。

0
投票

我发现了类似的错误(关于服务发现),如下所示。

Go Fabric Client日志:

Failed to get endorsing peers: error getting channel response for channel [myc]:
Discovery status Code: (11) UNKNOWN. Description: error received from Discovery Server: 
failed constructing descriptor for chaincodes:<name:"mycc"> 

同行日志:

Failed constructing descriptor for chaincode chaincodes:<name:"mycc" > ,: 
cannot satisfy any principal combination

我在CORE_PEER_GOSSIP_EXTERNALENDPOINT环境属性上提供了对等配置的正确值(在我的情况下在docker yaml文件中),这是固定的。

据我所知,由于缺少此属性,因此在对等端上运行的发现服务无法相互通信,无法得出当前网络的结论。


0
投票

您必须从频道中的每个组织添加一个主持人,这解决了我的问题。服务发现需要锚定对等体,因为服务发现使用八卦协议 - 感谢@yacovm

© www.soinside.com 2019 - 2024. All rights reserved.