我在GCP中部署了一个超分类器结构网络。我使用fabric节点sdk与网络通信。
当sdk和网络之间没有activity时,如果我试图调用链码,则API调用在sendTransaction到Orderer时失败,并带有以下日志。
错误:[Orderer.js]:SendBroadcast-on错误:“错误:14不可用:TCP读取失败\n在createStatusError(/usr/src/app/node_modules/grpc/src/client.js:64:15)\n在ClientDuplexStream._emitStatusIfdone(/usr/src/app/node_modules/grpc/src/client.js:270:19)\n在ClientDuplexStream._receivestatus(/usr/src/app/node_modules/fabric-client/lib/orderer.js:136:21)在emitOne(events.js:116:13)在clientduplexstream.emit(events.js:211:7)在clientduplexstream._emitstatusifdone(/usr/src/app/node_modules/grpc/src/client.js:271:12)在clientduplexstream._receivestatus((/usr/src/app/node_modules/fabric-client/lib/orderer.js:136:21)在emitOne(events.js:116:13)在clientduplexstream.emit(events.js:211:7)在clientduplexstream._emitstatusifdone(/usr/src/app/node_modules/grpc/src/client.js:271:12)在clientduplexstream._receivestatus(
看来SDK无法到达订购者。立即的下一个调用请求成功。在空闲时间为15分钟后,每次都会发生这种情况。
我尝试为连接设置grpc超时,但似乎没有帮助。
很可能是GCP断开了空闲连接。您需要为您的客户端设置gRPC keepalive选项。类似于:
"connection-options": {
"grpc.max_receive_message_length": -1,
"grpc.max_send_message_length": -1,
"grpc.keepalive_time_ms": 120000,
"grpc.http2.min_time_between_pings_ms": 120000,
"grpc.keepalive_timeout_ms": 20000,
"grpc.http2.max_pings_without_data": 0,
"grpc.keepalive_permit_without_calls": 1
}
请参阅https://fabric-sdk-node.github.io/release-1.4/tutorial-grpc-settings.html了解使用节点SDK设置这些内容的详细信息