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

sendTransaction Fails when it's invoked after the network is idle for 15-20 minutes

我在 GCP 中部署了一个 hyperledger fabric 网络。 我使用结构节点 sdk 与网络通信。

当 sdk 和网络之间没有 activity 时,如果我尝试调用链代码, API 调用在向订购者发送交易时失败,日志如下。

错误:[Orderer.js]:sendBroadcast - 错误:"Error: 14 UNAVAILABLE: TCP Read failed\n at createStatusError (/usr/src/app/node_modules/grpc/src/client.js:64:15)\n at ClientDuplexStream._emitStatusIfDone (/usr/src/app/node_modules/grpc/src/client.js:270:19)\n at ClientDuplexStream._receiveStatus (/usr/src/app/node_modules/grpc/src/client.js:248:8)\n at /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 似乎无法访问 Orderer。立即下一个调用请求成功。 这发生在空闲时间 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 
    }

有关使用 Node SDK 进行设置的详细信息,请参阅 https://fabric-sdk-node.github.io/release-1.4/tutorial-grpc-settings.html