我在GCP中部署了一个超级账本结构网络。 我使用交换矩阵节点sdk与网络进行通信。
当sdk和网络之间没有活动时,如果我尝试调用chaincode, 该API调用将sendTransaction发送到具有以下日志的订购者失败。
错误:[Orderer.js]:sendBroadcast-错误:“错误: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 / grpc / src / client .js:248:8)\ n在/usr/src/app/node_modules/grpc/src/client.js:804:12“ 请求失败:POST / channels / stanfinandcredth / chaincodes / sc1547746253:SERVICE_UNAVAILABLE 错误:SERVICE_UNAVAILABLE 在ClientDuplexStream上。 (/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/grpc/src/client.js:248:8) 在/usr/src/app/node_modules/grpc/src/client.js:804:12 错误:SERVICE_UNAVAILABLE 在ClientDuplexStream上。 (/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/grpc/src/client.js:248:8) 在/usr/src/app/node_modules/grpc/src/client.js:804:12
似乎SDK无法连接到订购者。立即下一个调用请求成功。 空闲时间为15分钟后,就会发生这种情况。
我尝试为连接设置grpc超时,但这似乎无济于事。
答案 0 :(得分:2)
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
}
有关使用Node SDK进行设置的详细信息,请参见https://fabric-sdk-node.github.io/release-1.4/tutorial-grpc-settings.html