0

我在 GCP 中部署了一个超级账本结构网络。我使用结构节点 sdk 与网络通信。

当 sdk 和网络之间没有活动时,如果我尝试调用链代码,API 调用会在 sendTransaction 到 Orderer 时失败,并显示以下日志。

错误:[Orderer.js]:sendBroadcast - 错误:“错误:14 不可用:TCP 读取失败\n at 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 错误:ClientDuplexStream 处的 SERVICE_UNAVAILABLE。(/usr/src/app/node_modules/fabric-client/lib/Orderer.js:136:21) 在 ClientDuplexStream.emit (events.js:211:7) 在 ClientDuplexStream 的 emitOne (events.js:116:13) ._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 错误:ClientDuplexStream 处的SERVICE_UNAVAILABLE。(/usr/src/app/node_modules/fabric-client/lib/Orderer.js:136:21) 在 ClientDuplexStream.emit (events.js:211:7) 在 ClientDuplexStream 的 emitOne (events.js:116:13) ._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 超时,但似乎没有帮助。

4

1 回答 1

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

于 2019-01-20T20:54:19.030 回答