提问者:小点点

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


我在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超时,但似乎没有帮助。


共1个答案

匿名用户

很可能是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设置这些内容的详细信息