据我所知,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
更令人困惑的是,gRPC似乎根本没有使用退避算法,即它总是使用〜20s值。
答案 0 :(得分:1)
我有同样的问题,在调查了gRPC核心源(在C中)后,我理解了这个问题:
我在gRPC存储库中创建了一个Pull Request,以使其可配置: https://github.com/grpc/grpc/pull/10237
如果你使用我的fork中的分支,你将能够在你的客户端构造函数中执行此操作:
- name: Render Cloud Formation Template
template: src=cloudformation.yml.j2 dest=rendered_templates/cloudformation.yml
- name: Launch Ansible CloudFormation Stack
cloudformation:
template: "rendered_templates/cloudformation.yml"
答案 1 :(得分:0)
Node gRPC Client构造函数采用可选的第三个参数,其中包含底层实现的选项。其中一个选项是"grpc.max_reconnect_backoff_ms"
。顾名思义,该值以毫秒为单位,因此您应该传递1000作为值。