You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hyperledger Fabric Java SDK重复创建已存在通道问题求助

Hyperledger Fabric Java应用通道访问故障排查求助

我开发的Hyperledger Fabric Java应用在访问已存在的assecodschannel通道时出现异常,尝试修改网络配置、移除配置中的通道段、手动为通道添加节点等操作后,仍提示“通道无配置”或“通道无节点”错误,无法定位问题根源,请求技术帮助。

相关代码

private static final String CHANNEL_NAME = System.getenv().getOrDefault("CHANNEL_NAME", "assecodschannel");
private static final String CHAINCODE_NAME = System.getenv().getOrDefault("CHAINCODE_NAME", "ccv1");

static {
    System.setProperty("org.hyperledger.fabric.sdk.service_discovery.as_localhost", "true");
}

// helper function for getting connected to the gateway
public static Gateway connect() throws Exception {

    // Load a file system based wallet for managing identities.
    Path walletPath = Paths.get("wallet");
    Wallet wallet = Wallets.newFileSystemWallet(walletPath);
    System.out.println("TLS Cert Content: " + new String(Files.readAllBytes(Paths.get("tls-cert.pem"))));
    System.out.println("CA Cert Content: " + new String(Files.readAllBytes(Paths.get("ca.crt"))));

    Path networkConfigPath = Paths.get("template","connections.yml");

    Gateway.Builder builder = Gateway.createBuilder();
    builder.identity(wallet, "User").networkConfig(networkConfigPath).discovery(true);
    return builder.connect();
}

public byte[] getAllAssets() throws ContractException {
    System.out.println("Before connecting to the network");
    try (Gateway gateway = connect()) {
        System.out.println("After connecting to the network");
//        System.out.println(gateway.getNetwork("assecodschannel").getChannel().joinPeer());
        gateway.getNetwork("assecodschannel").getChannel();
        System.out.println("jj");
        Network network = gateway.getNetwork("assecodschannel");
        System.out.println("huj");
        Contract contract = network.getContract("chaincode");
        return contract.evaluateTransaction("GetAllAssets");
    }
    catch(Exception e){
        System.err.println(e);
        System.exit(1);
        return null;
    }
}

网络配置文件

connections.yml

name: "AssecoDS-network"
version: "1.0"
x-type: "hlfv1"

client:
  organization: AssecoDS
  connection:
    timeout:
      peer:
        endorser: '300'
      orderer: '300'
channels:
  assecodschannel:
    orderers:
      - orderer1.assecods.pl
    peers:
      peer1.assecods.pl:
        endorsingPeer: true
        chaincodeQuery: true
        ledgerQuery: true
        eventSource: true
        discover: true

organizations:
  AssecoDS:
    mspid: AssecoDSMSP
    peers:
      - peer1.assecods.pl
    certificateAuthorities:
      - ca.assecods.pl

orderers:
  orderer1.assecods.pl:
    url: 100.64.192.62:7050
    grpcOptions:
      ssl-target-name-override: orderer1.assecods.pl
      grpc-max-send-message-length: -1
    tlsCACerts:
      path: ca.crt

peers:
  peer1.assecods.pl:
    url: 100.64.192.62:7051
    eventUrl: 100.64.192.62:7053
    grpcOptions:
      ssl-target-name-override: peer1.assecods.pl
      grpc.keepalive_time_ms: 120001
    tlsCACerts:
      path: /home/hubert/Desktop/hyperledger-fabric-generic-network-master/application-java/tls-cert.pem

certificateAuthorities:
  ca.assecods.pl:
    url: https://localhost:7054
    httpOptions:
      verify: false
    registrar:
      - enrollId: admin
        enrollSecret: adminpw
    caName: ca.assecods.pl

connection.yaml

---
name: AssecoDS-network
version: 1.0.0
client:
  organization: AssecoDS
  connection:
    timeout:
      peer:
        endorser: '300'
      orderer: '300'
channels:
  assecodschannel:
    orderers:
    - orderer1.assecods.pl
    peers:
     peer1.assecods.pl: {}
organizations:
  AssecoDS:
    mspid: AssecoDSMSP
    peers:
    - peer1.assecods.pl
    certificateAuthorities:
    - ca.assecods.pl
orderers:
  orderer1.assecods.pl:
    url: 127.0.0.1:7050
peers:
  peer1.assecods.pl:
    url: 127.0.0.1:7051
    tlsCACerts:
      pem: /home/hubert/Desktop/hyperledger-fabric-generic-network-master/application-java/tls-cert.pem
certificateAuthorities:
  ca.assecods.pl:
    url: 127.0.0.1:7054
    caName: ca.assecods.pl
    httpOptions:
      verify: false
    tlsCACerts:
      pem: /home/hubert/Desktop/hyperledger-fabric-generic-network-master/application-java/tls-cert.pem
    registrar:
    - enrollId: admin
      enrollSecret: adminpw

错误信息

运行时抛出异常,核心提示为通道无配置或通道无节点,关键异常内容如下:

Exception in thread "main" java.lang.RuntimeException: Channel assecodschannel has no peers configured
或
Exception in thread "main" java.lang.RuntimeException: Channel assecodschannel has no configuration

排查建议

  • 检查配置文件路径:确认connections.yml的路径Paths.get("template","connections.yml")是否正确,应用能否读取该文件,可添加文件存在性校验:
    if (!Files.exists(networkConfigPath)) {
        throw new FileNotFoundException("Network config file not found: " + networkConfigPath.toString());
    }
    
  • 核对通道名称一致性:确保代码中CHANNEL_NAME常量与配置文件中的通道名assecodschannel完全一致(注意大小写、空格等细节)
  • 验证服务发现功能:启用discovery(true)后,确认Fabric网络的Peer节点已开启服务发现,且配置中peers的discover属性为true(connections.yml中已设置,但需检查网络端配置)
  • 检查节点网络可达性:测试应用机器能否连接到配置中的Peer/Orderer节点(100.64.192.62或127.0.0.1),可使用grpcurl工具验证gRPC连接有效性
  • 确认证书有效性:核对配置中tlsCACerts指向的证书文件是否存在、内容正确,代码中已打印证书内容,可与网络节点的CA证书对比
  • 测试静态配置模式:暂时注释builder.discovery(true),使用静态配置访问通道,排查是否是服务发现导致的问题
  • 检查钱包身份权限:确认钱包中的User身份已正确注册enroll,所属MSPID与配置AssecoDSMSP一致,且拥有该通道的访问权限

内容的提问来源于stack exchange,提问作者Hubert Jaworski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:44:53