据我所知,gRPC 客户端会自动尝试使用退避算法重新建立丢失的连接。我的目标是让 gRPC 至少每秒尝试重新连接。
使用 Go 实现,这可以通过WithBackoffMaxDelay在首次建立与服务的连接时传递拨号选项来实现。我如何在 Node.js 实现中做同样的事情?
按照建议,我尝试将grpc.max_reconnect_backoff_ms选项传递给客户端构造函数。如果我故意传递一个像 -1 这样的无效值,gRPC 会记录一条错误消息,所以我相信我正在正确使用它。
但是,该选项似乎不会影响 gRPC 的重新连接行为。相反,它似乎大约每 20 秒尝试重新连接一次:
I0215 21:21:07.246695000 140736304567232 subchannel.c:694] Connect failed: {"created":"@1487190067.246665000","description":"Failed to connect to remote host","errno":61,"file":"../src/core/lib/iomgr/tcp_client_uv.c","file_line":104,"os_error":"connection refused"}
I0215 21:21:07.246910000 140736304567232 subchannel.c:491] Retry in 19.999536519 seconds
Run Code Online (Sandbox Code Playgroud)
更令人困惑的是,gRPC 似乎根本不使用退避算法,即它始终使用 ~20s 值。
我遇到了同样的问题,在调查了 gRPC 核心源代码(C 语言)后,我明白了这个问题:
我在 gRPC 存储库中提出了一个拉取请求,以使其可配置:https : //github.com/grpc/grpc/pull/10237
如果您使用我的 fork 中的分支,您将能够在您的客户端构造函数中执行此操作:
new ...client(host, credentials, {
'grpc.min_reconnect_backoff_ms': 1000,
'grpc.max_reconnect_backoff_ms': 10000,
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1871 次 |
| 最近记录: |