Hyperledger fabric Hyperledger结构1.2服务发现错误

Hyperledger fabric Hyperledger结构1.2服务发现错误,hyperledger-fabric,hyperledger,service-discovery,Hyperledger Fabric,Hyperledger,Service Discovery,我使用Hyperledger Fabric 1.2构建了一个区块链集群,其中包含3个对等方和3个订购方。我可以通过CLI和Java SDK成功地部署和调用链码。一切正常。然而,当我注意到服务发现功能并尝试使用它时,我遇到了两个问题。首先,在我构建发现工具并尝试使用它获取一些发现的信息后,我无法访问对等方并获取如下消息 “连接到发现服务失败:无法创建新服务。” 连接:超出上下文截止日期“ config命令是 discover--conffile conf.yaml--userKey./crypto

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

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

config命令是

discover--conffile conf.yaml--userKey./crypto-config/peerOrganizations/org1.forchain.com/peers/peer0.org1.forchain.com/msp/keystore/7458b29b1fb6a897685430dbf0e522a40ff4aefe600fc1e4fafe62c972e4_-sk--userCert./crypto-config/peerOrganizations/org1.forchain.com/peers/peer0.org1.forchain.com/msp/signs/peer0.org1.forchain.certs/peer0.forchain.forchain.com--MSP Org1MSP saveConfig

查询命令是

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

我想可能是TLS配置导致的,所以我取消了TLS并重试。这一次我成功地访问了对等机并获得了一些消息,但我遇到了另一个问题。当我使用“discover peers xxx”命令时,我总是得到
null
result,事实上该通道中有两个对等点。当我使用
'discover endorsers xxx'
命令时,总是会收到以下错误消息

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

同时,对等日志输出以下消息:

'主体集计算失败:上未安装链码 背书政策2018-08-01要求的足够组织 10:21:50.860 UTC[发现]链码查询->ERRO 1441失败 为链码链码构造描述符: ,:链码未安装在所需的足够组织上 认可政策

我可以保证chaincode已成功安装在所有对等计算机中。我在实例化链码时没有使用背书策略。我认为这不是策略问题,因为我仍然可以调用链码并提出事务。 我还尝试使用JavaSDK,发现我可以获取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”命令,以及如何获取发现的信息

对于config命令-您需要通过--peerTLSCA传递TLS根CA。请看表中的例子并采取相应的行动

现在-对于第二个问题,我认为同龄人可能在通道中彼此不认识

  • 确保在通道中定义了锚节点,并且两个节点都配置了外部端点
  • 如果你挣扎太久,无法解决问题,请随时在chat.hyperledger.org上打扰我(yacovm)
    我遇到了一个类似的错误(关于服务发现),如下所示

    转到结构客户端日志:

    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"> 
    
    获取认可对等方失败:获取通道[myc]的通道响应时出错:
    发现状态代码:(11)未知。描述:从发现服务器接收到错误:
    为链码构造描述符失败:
    
    对等日志:

    Failed constructing descriptor for chaincode chaincodes:<name:"mycc" > ,: 
    cannot satisfy any principal combination
    
    构建链码的描述符失败链码:,:
    不能满足任何主组合
    
    当我为
    CORE\u PEER\u GOSSIP\u EXTERNALENDPOINT
    环境属性在PEER的配置上提供正确的值时(在我的例子中是docker yaml文件中),它是固定的


    据我所知,由于缺少此属性,对等点上运行的发现服务无法相互通信,无法确定当前网络的外观。

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

    请编辑您的消息并精确指定:(1)如果您使用配置文件,请指定用于配置配置文件的命令;(2)用于查询对等方的命令。问题是否已被更新为DS TLS证书授权?如果对等点以非TLS方式运行,则不需要它。我说的对吗?嘿@yacovm。我有一个docker文件。当我不使用对等服务发现选项,而使用1.1方式时,代码工作正常。当我使用SD选项时,我在javasdk中遇到了unkbown主机异常,看起来无法以这种方式访问对等点。请你查一下档案,告诉我哪里出了问题。下面是文件的内容==>我想你的评论被截断了,你可以问一下,嘿,我在hyperledger聊天上发表了评论。看看。你能标记我吗?或者你希望我扫描所有的信息?