我在GCP中部署了一个超级账本结构网络。我使用结构节点sdk与网络通信。
当sdk和网络之间没有活动时,如果我试图调用链代码,API调用在向具有以下日志的Orderer发送Transaction时失败。
error:[Order.js]:sendBroadcast-on error:"错误:14不可用:TCP读取失败\n在createStatusError(/usr/src/app/node_modules/grpc/src/client.js:64:15\n位于/usr/src/app/node_modules/grpc/src/client.js:804:12"请求失败:POST/channels/stanfinandcredth/chaincodes/sc154776253:SERVICE_NAVAILABLE错误:SERVICE_UNAVAILABLE在ClientDuplexStream。(/usr/src/app/nod_modules\fabric-client/lib/Orderer.js:136:21)在emitOne(events.js:116:13)位于ClientDuplexStream.emit(events.js:211:7)在ClientDuplexStream_emitStatusIofDone(/usr/src/app/nod_modules/grpc/src/client.js:271:12)在ClientDuplexStream_receiveStatus(/usr/src/app/node_modules/grpc/src/client.js:248:8)位于/usr/src/app/node_modules/grpc/src/client.js:804:12错误:SERVICE_UNAVAILABLE在ClientDuplexStream。(/usr/src/app/nod_modules\fabric-client/lib/Orderer.js:136:21)在emitOne(events.js:116:13)位于ClientDuplexStream.emit(events.js:211:7)在ClientDuplexStream_emitStatusIofDone(/usr/src/app/nod_modules/grpc/src/client.js:271:12)在ClientDuplexStream_receiveStatus(/usr/src/app/node_modules/grpc/src/client.js:248:8)位于/usr/src/app/nod_modules/grpc/src/client.js:804:12
SDK似乎无法访问Orderer。紧接着的下一个调用请求成功。这种情况每隔15分钟就会发生。
我试着为连接设置grpc超时,但似乎没有帮助。
GCP很可能正在拆除空闲连接。您需要为客户端设置gRPC保持活动选项。类似于:
"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有关使用Node SDK 设置这些的详细信息