网络闲置15-20分钟后调用sendTransaction失败

时间:2019-01-19 07:43:01

标签: node.js hyperledger-fabric grpc hyperledger-fabric-sdk-js

我在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超时,但这似乎无济于事。

1 个答案:

答案 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