【问题标题】:What is the default value for the gPRC deadline (java)gPRC截止日期的默认值是什么(java)
【发布时间】:2018-07-31 00:22:57
【问题描述】:

我注意到阻塞 gPRC 调用可能会被阻塞很长时间,如果不是永远的话。

我查了一下,发现如下页面:https://grpc.io/docs/guides/concepts.html#deadlines

但是,该页面并未告知 Java 的默认截止日期/超时值。 所以,我想知道是否有默认的 java 值。

如果没有,我可能必须为所有呼叫设置截止日期。哪个不方便...

【问题讨论】:

    标签: java api grpc


    【解决方案1】:

    在 gRPC 中,任何语言都没有默认截止日期。如果出现网络故障并且在客户端启用了keepalive,则调用最终会失败。但是如果服务器花费了无限的时间,那么客户端可能会等待无限的时间。

    【讨论】:

      【解决方案2】:

      根据本期https://github.com/grpc/grpc-java/issues/1495相当于“无穷大”

      【讨论】:

        【解决方案3】:

        就像@Eric Anderson 所说,没有默认截止日期。但是,强烈建议为客户端中的每个 RPC 设置一个,服务提供商还应指定他们支持的最长期限,如博客中所述:https://grpc.io/blog/deadlines

        一般来说,如果您不设置截止日期,则会为所有正在进行的请求保留资源,并且所有请求都可能达到最大超时时间。这会使服务面临耗尽资源(如内存)的风险,这会增加服务的延迟,或者在最坏的情况下会导致整个进程崩溃。

        为避免这种情况,服务应指定他们在技术上支持的最长默认截止日期,并且客户应等到响应不再对他们有用。对于服务,这可以像在 .proto 文件中提供注释一样简单。对于客户而言,这涉及设置有用的截止日期。

        【讨论】:

          猜你喜欢
          • 2015-08-25
          • 2016-07-03
          • 2021-09-14
          • 1970-01-01
          • 1970-01-01
          • 2018-09-26
          • 2016-06-07
          • 2020-01-08
          • 2015-08-07
          相关资源
          最近更新 更多