Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Sign in
issue
issue
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 15
    • Issues 15
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar

新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!

  • chainmaker
  • issueissue
  • Issues
  • #1466

Closed
Open
Opened Sep 11, 2025 by jieke@13992732469🎨

使用长安链 Java SDK,创建连接失败maxInboundMetadataSize must be > 0

我创建了一个ChainClientDemo类,代码如下:

package com.example.sdk.client;

import org.chainmaker.sdk.ChainManager; import org.chainmaker.sdk.ChainClient; import org.chainmaker.sdk.SdkException; import org.chainmaker.sdk.config.*; import org.chainmaker.sdk.utils.FileUtils;

import java.io.IOException; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List;

/**

  • ChainMaker Java SDK Demo

  • 使用无配置文件方式初始化 ChainClient */ public class ChainClientDemo {

    // ================= 配置常量 ================= private static final String CHAIN_ID = "chain1"; private static final String ORG_ID1 = "wx-org1.chainmaker.org";

    private static final String NODE_GRPC_URL1 = "192.168.2.246:12301"; private static final String TLS_HOST_NAME1 = "consensus1.tls.wx-org1.chainmaker.org"; private static final int CONNECT_COUNT = 1; private static final int MAX_MESSAGE_SIZE = 104857600; // 100MB

    // 客户端证书路径(相对或绝对路径均可) private static final String CLIENT1_KEY_PATH = "src/main/resources/crypto-config/client1/client1.sign.key"; private static final String CLIENT1_CERT_PATH = "src/main/resources/crypto-config/client1/client1.sign.crt"; private static final String CLIENT1_TLS_KEY_PATH = "src/main/resources/crypto-config/client1/client1.tls.key"; private static final String CLIENT1_TLS_CERT_PATH = "src/main/resources/crypto-config/client1/client1.tls.crt"; private static final String ORG1_CERT_PATH = "src/main/resources/crypto-config/ca/ca.crt";

    // 归档配置 private static final String DEST = "/opt/chainmaker/archive"; private static final String TYPE = "local"; private static final String SECRET_KEY = "";

    // ================= SDK 对象 ================= private ChainManager chainManager; private ChainClient chainClient;

    public void initWithNoConfig() throws IOException, SdkException { // 读取节点 TLS 根证书 byte[][] tlsCaCerts = new byte[][]{FileUtils.getResourceFileBytes(ORG1_CERT_PATH)};

     // 创建 SdkConfig 对象
     SdkConfig sdkConfig = new SdkConfig();
     ChainClientConfig chainClientConfig = new ChainClientConfig();
     sdkConfig.setChainClient(chainClientConfig);
    
     // RPC 配置
     RpcClientConfig rpcClientConfig = new RpcClientConfig();
     rpcClientConfig.setMaxReceiveMessageSize(MAX_MESSAGE_SIZE);
    
    
    
    
     // 归档配置
     ArchiveConfig archiveConfig = new ArchiveConfig();
     archiveConfig.setDest(DEST);
     archiveConfig.setType(TYPE);
     archiveConfig.setSecretKey(SECRET_KEY);
    
     // 节点配置
     NodeConfig nodeConfig = new NodeConfig();
     nodeConfig.setTrustRootBytes(tlsCaCerts);
     nodeConfig.setTlsHostName(TLS_HOST_NAME1);
     nodeConfig.setEnableTls(true);
     nodeConfig.setNodeAddr(NODE_GRPC_URL1);
     nodeConfig.setConn_cnt(CONNECT_COUNT);
    
     NodeConfig[] nodeConfigs = new NodeConfig[]{nodeConfig};
    
     // 初始化 ChainManager
     chainManager = ChainManager.getInstance();
    
     // 设置 ChainClient 配置
     chainClientConfig.setOrgId(ORG_ID1);
     chainClientConfig.setChainId(CHAIN_ID);
     chainClientConfig.setUserKeyBytes(FileUtils.getResourceFileBytes(CLIENT1_TLS_KEY_PATH));
     chainClientConfig.setUserCrtBytes(FileUtils.getResourceFileBytes(CLIENT1_TLS_CERT_PATH));
     chainClientConfig.setUserSignKeyBytes(FileUtils.getResourceFileBytes(CLIENT1_KEY_PATH));
     chainClientConfig.setUserSignCrtBytes(FileUtils.getResourceFileBytes(CLIENT1_CERT_PATH));
     chainClientConfig.setRpcClient(rpcClientConfig);
     chainClientConfig.setArchive(archiveConfig);
     chainClientConfig.setNodes(nodeConfigs);
    
     // 初始化 ChainClient
     chainClient = chainManager.getChainClient(CHAIN_ID);
     if (chainClient == null) {
         chainClient = chainManager.createChainClient(sdkConfig);
     }
     System.out.println("ChainClient 初始化成功,ChainID = " + chainClient.getChainId());

    }

    public void testQueryBlockHeight() throws SdkException { String txId = "1861f32f5db1638aca690e1781c580f0203580a17604487880a967788ef5be0b"; long blockHeight = chainClient.getBlockHeightByTxId(txId, 2000); System.out.println("TxID 对应的区块高度: " + blockHeight); }

    public static void main(String[] args) { ChainClientDemo demo = new ChainClientDemo(); try { demo.initWithNoConfig(); System.out.println("ChainClient 初始化成功,ChainID = " + CHAIN_ID);

         // 查询区块高度示例
         demo.testQueryBlockHeight();
    
     } catch (Exception e) {
         System.err.println("初始化 ChainClient 失败: " + e.getMessage());
         e.printStackTrace();
     }

    } }

执行后,出现如下报错:

14:11:15.679 [main] WARN org.chainmaker.sdk.GrpcClientFactory - ===============创建连接失败maxInboundMetadataSize must be > 0,把节点加入异常节点grpcs://192.168.2.246:12301_consensus1.tls.wx-org1.chainmaker.org 14:11:15.696 [main] WARN org.chainmaker.sdk.GrpcClientFactory - ===============创建连接失败=============== java.lang.IllegalArgumentException: maxInboundMetadataSize must be > 0 at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145) at io.grpc.netty.NettyChannelBuilder.maxInboundMetadataSize(NettyChannelBuilder.java:418) at org.chainmaker.sdk.RpcServiceClient.initManagedChannel(RpcServiceClient.java:138) at org.chainmaker.sdk.RpcServiceClient.(RpcServiceClient.java:90) at org.chainmaker.sdk.RpcServiceClient.newServiceClient(RpcServiceClient.java:105) at org.chainmaker.sdk.GrpcClientFactory.createRpcClient(GrpcClientFactory.java:143) at org.chainmaker.sdk.GrpcClientFactory.create(GrpcClientFactory.java:119) at org.chainmaker.sdk.GrpcClientFactory.create(GrpcClientFactory.java:26) at org.apache.commons.pool2.BasePooledObjectFactory.makeObject(BasePooledObjectFactory.java:70) at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:571) at org.apache.commons.pool2.impl.GenericObjectPool.addObject(GenericObjectPool.java:212) at org.chainmaker.sdk.ChainManager.createChainClient(ChainManager.java:200) at org.chainmaker.sdk.ChainManager.createChainClient(ChainManager.java:148) at com.example.sdk.client.ChainClientDemo.initWithNoConfig(ChainClientDemo.java:94) at com.example.sdk.client.ChainClientDemo.main(ChainClientDemo.java:108) 14:11:15.696 [main] ERROR org.chainmaker.sdk.GrpcClientFactory - create chainClient error:no node can use java.lang.IllegalArgumentException: maxInboundMetadataSize must be > 0 at com.google.common.base.Preconditions.checkArgument(Preconditions.java:145) at io.grpc.netty.NettyChannelBuilder.maxInboundMetadataSize(NettyChannelBuilder.java:418) at org.chainmaker.sdk.RpcServiceClient.initManagedChannel(RpcServiceClient.java:138) at org.chainmaker.sdk.RpcServiceClient.(RpcServiceClient.java:90) at org.chainmaker.sdk.RpcServiceClient.newServiceClient(RpcServiceClient.java:105) at org.chainmaker.sdk.GrpcClientFactory.createRpcClient(GrpcClientFactory.java:143) at org.chainmaker.sdk.GrpcClientFactory.create(GrpcClientFactory.java:119) at org.chainmaker.sdk.GrpcClientFactory.create(GrpcClientFactory.java:26) at org.apache.commons.pool2.BasePooledObjectFactory.makeObject(BasePooledObjectFactory.java:70) at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:571) at org.apache.commons.pool2.impl.GenericObjectPool.addObject(GenericObjectPool.java:212) at org.chainmaker.sdk.ChainManager.createChainClient(ChainManager.java:200) at org.chainmaker.sdk.ChainManager.createChainClient(ChainManager.java:148) at com.example.sdk.client.ChainClientDemo.initWithNoConfig(ChainClientDemo.java:94) at com.example.sdk.client.ChainClientDemo.main(ChainClientDemo.java:108) 14:11:15.696 [main] WARN org.chainmaker.sdk.ChainManager - create connpool object fail:%v java.lang.RuntimeException: create chainClient error:no node can use at org.chainmaker.sdk.GrpcClientFactory.createRpcClient(GrpcClientFactory.java:169) at org.chainmaker.sdk.GrpcClientFactory.create(GrpcClientFactory.java:119) at org.chainmaker.sdk.GrpcClientFactory.create(GrpcClientFactory.java:26) at org.apache.commons.pool2.BasePooledObjectFactory.makeObject(BasePooledObjectFactory.java:70) at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:571) at org.apache.commons.pool2.impl.GenericObjectPool.addObject(GenericObjectPool.java:212) at org.chainmaker.sdk.ChainManager.createChainClient(ChainManager.java:200) at org.chainmaker.sdk.ChainManager.createChainClient(ChainManager.java:148) at com.example.sdk.client.ChainClientDemo.initWithNoConfig(ChainClientDemo.java:94) at com.example.sdk.client.ChainClientDemo.main(ChainClientDemo.java:108) 14:11:15.696 [main] DEBUG org.chainmaker.sdk.GrpcClientFactory - getLeastConnNode grpc url:grpcs://192.168.2.246:12301_consensus1.tls.wx-org1.chainmaker.org...

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking
None
Due date
None
Reference: chainmaker/issue#1466

Copyright © 2021 ChainMaker Org. All Rights Reserved. 长安链 版权所有。