使用长安链 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...