Hyperledger Fabric v2链码交易时报ELIFECYCLE错误求助
问题根因定位
你遇到的npm报错只是链码进程异常退出后的衍生错误,核心问题来自日志中的Received unknown message from the peer. Exiting.,属于Fabric节点和链码的gRPC长连接通信异常,仅第一个peer能正常运行说明链码本身逻辑没有问题,问题出在多节点部署的配置一致性或依赖版本bug上。
解决方案
- 校验所有peer节点的链码包一致性
在每个peer节点执行命令peer lifecycle chaincode queryinstalled,对比所有节点输出的链码Package ID是否完全一致。多节点部署时如果逐个手动打包链码,很容易出现包ID不匹配的情况,导致除第一个完成背书的节点外,其余节点收到交易请求时无法匹配对应链码实例,抛出未知消息错误。如果ID不一致,统一打包一次链码后分发到所有节点安装即可。 - 统一调整所有peer的gRPC keepalive配置
你日志中链码注册后刚好30秒报错,匹配默认gRPC空闲超时阈值。修改所有peer的core.yaml配置,调整参数如下:
多节点部署时如果未统一配置keepalive,节点负载波动或网络延迟会导致链码与peer的长连接意外断开,旧版本fabric-shim会将断开通知识别为未知消息,直接触发进程退出。peer: chaincode: keepalive: minInterval: 30s client: keepaliveTime: 60s keepaliveTimeout: 20s keepalivePermitWithoutStream: true - 升级Fabric链码依赖版本
你当前使用的2.2.1版本fabric-contract-api、fabric-shim存在已知的长连接消息解析bug,修改package.json中的依赖版本如下,重新打包链码安装即可解决:"dependencies": { "ajv": "^6.12.6", "fabric-contract-api": "^2.5.4", "fabric-shim": "^2.5.4", "grpc": "^1.55.0" } - 校验所有节点的TLS配置一致性
检查所有peer的core.yaml中peer.tls.rootcert.file对应的根证书是否为同一个CA签发,禁止单个节点使用独立的TLS证书,证书不匹配会导致加密通信的消息解析失败。
内容的提问来源于stack exchange,提问作者Assem Makhyon
相关产品推荐
相关产品推荐

