如何在Node.js实现中更改gRPC的重新连接行为?

从我所知道的情况来看,gRPC客户端会自动尝试使用退避algorithm重新build立丢失的连接。 我的目标是让gRPC至less每秒钟尝试重新连接。

使用Go实现时,可以通过在首次build立与服务的连接时传递WithBackoffMaxDelay拨号选项。 我如何在Node.js实现中做同样的事情?


build议我尝试将grpc.max_reconnect_backoff_ms选项传递给客户端构造函数。 如果我故意传递一个无效的值,如-1,gRPC会logging一条错误消息,所以我相信我正确地使用它。

但是,该选项似乎不影响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 

更令人困惑的是,gRPC似乎根本没有使用退避algorithm,即它总是使用〜20s的值。

我有同样的问题,并调查gRPC核心来源(在C)后,我已经了解这个问题:

  • 可以像@ murgatroid99指出的那样configuration最长时间,但是不可能configuration最短时间,最短时间是20秒。

我已经在gRPC库上做了一个Pull请求,让它可configuration: https : //github.com/grpc/grpc/pull/10237

如果你使用我的fork分支,你可以在你的客户端构造函数中做到这一点:

 new ...client(host, credentials, { 'grpc.min_reconnect_backoff_ms': 1000, 'grpc.max_reconnect_backoff_ms': 10000, }) 

节点gRPC客户端构造函数为可选的第三个参数提供了底层实现的选项。 其中一个选项是"grpc.max_reconnect_backoff_ms" 。 顾名思义,这个值是以毫秒为单位的,所以你应该通过1000的值。