java sdk create chainClient error:no node can use
#区块链配置 #链 ID chain_client.chain_id=testChain001 #组织 ID chain_client.org_id=TestCMorg1 #客户端用户私钥路径 chain_client.user_key_file_path=chain/local/crypto-config/TestCMorg1/user/cmtestuser1/cmtestuser1.tls.key #客户端用户证书路径 chain_client.user_crt_file_path=chain/local/crypto-config/TestCMorg1/user/cmtestuser1/cmtestuser1.tls.crt #客户端用户交易签名私钥路径 chain_client.user_sign_key_file_path=chain/local/crypto-config/TestCMorg1/user/cmtestuser1/cmtestuser1.sign.key #客户端用户交易签名证书路径 chain_client.user_sign_crt_file_path=chain/local/crypto-config/TestCMorg1/user/cmtestuser1/cmtestuser1.sign.crt #同步交易结果模式下,轮训获取交易结果时的最大轮训次数 chain_client.retry_limit=-1 #同步交易结果模式下,每次轮训交易结果时的等待时间 chain_client.retry_interval=-1 #节点地址 chain_client.node_address=192.168.60.130:12301 #TLS hostname chain_client.tls_host_name=chainmaker.org #信任证书池路径 chain_client.trust_root_paths=chain/local/crypto-config/TestCMorg1/ca/ca.crt #数据归档链外存储相关配置 chain_client.archive.dest=root:123456:localhost:3306 chain_client.archive.type=mysql chain_client.archive.secret_key= #grpc 客户端接收消息时,允许单条 message 大小的最大值 (MB) chain_client.rpc_client.max_receive_message_size=16 #合约名称 chain_client.contract_name=lftest002 #保存方法 chain_client.save_method=save #查询方法 chain_client.query_method=find_by_file_hash
代码: byte[][] tlsCaCerts = new byte[][]{FileUtils.getResourceFileBytes(orgCertPath)};
RpcClientConfig rpcClientConfig = new RpcClientConfig();
rpcClientConfig.setMaxReceiveMessageSize(maxReceiveMessageSize);
ArchiveConfig archiveConfig = new ArchiveConfig();
archiveConfig.setDest(archiveDest);
archiveConfig.setType(archiveType);
archiveConfig.setSecretKey(archiveSecretKey);
List<NodeConfig> nodeConfigList = new ArrayList<>();
List<String> nodeAddressList = StrUtil.split(nodeAddress, ";");
for(String nodeAddr : nodeAddressList){
NodeConfig nodeConfig = new NodeConfig();
nodeConfig.setTrustRootBytes(tlsCaCerts);
nodeConfig.setTlsHostName(nodeHostName);
//RPC 连接是否启用双向 TLS 认证
nodeConfig.setEnableTls(true);
nodeConfig.setNodeAddr(nodeAddr);
nodeConfigList.add(nodeConfig);
}
ChainClientConfig chainClientConfig = new ChainClientConfig();
chainClientConfig.setOrgId(orgId);
chainClientConfig.setChainId(chainId);
chainClientConfig.setUserKeyBytes(FileUtils.getResourceFileBytes(userKeyPath));
chainClientConfig.setUserCrtBytes(FileUtils.getResourceFileBytes(userCertPath));
chainClientConfig.setUserSignKeyBytes(FileUtils.getResourceFileBytes(userSignKeyPath));
chainClientConfig.setUserSignCrtBytes(FileUtils.getResourceFileBytes(userSignCertPath));
chainClientConfig.setRetryLimit(retryLimit);
chainClientConfig.setRetryInterval(retryInterval);
chainClientConfig.setRpcClient(rpcClientConfig);
chainClientConfig.setArchive(archiveConfig);
chainClientConfig.setNodes(nodeConfigList.stream().toArray(NodeConfig[]::new));
SdkConfig sdkConfig = new SdkConfig();
sdkConfig.setChainClient(chainClientConfig);
if (chainClient == null) {
chainClient = chainManager.createChainClient(sdkConfig);
}
chainClient.invokeContract(contractName, saveMethod, txId, params, rpcCallTimeout, syncResultTimeout);
异常信息: 2025-09-25 09:56:04.953[supplier][traceId=N/A][commons-pool-evictor]WARN org.chainmaker.sdk.GrpcClientFactory-===============创建连接失败,把节点加入异常节点grpcs://192.168.60.130:12301 2025-09-25 09:56:04.954[supplier][traceId=N/A][commons-pool-evictor]WARN org.chainmaker.sdk.GrpcClientFactory-create chainClient error:no node can use