如何为Java / Kotlin / Android中的所有请求设置gRPC客户端超时

时间:2020-08-26 16:51:15

标签: android grpc grpc-java

我正在尝试开始将grpc用于Android。

我发现了如何为单个请求设置超时(最后期限)。

是否可以为所有请求设置超时?我真的不想在每个请求之前都设置截止日期

1 个答案:

答案 0 :(得分:2)

您可以使用service config逐个方法提供默认值,也可以使用拦截器在渠道级设置截止日期。

可以通过managedChannelBuilder.defaultServiceConfig(Map)指定

Service config。您可以选择根据不同的方法设置不同的超时时间。理想情况下,此配置应由服务所有者管理。

Map<String, Object> wildcardConfig = new HashMap<>();
wildcardConfig.put("name", Collections.singletonList(
    // This would specify a service+method if you wanted
    // different methods to have different settings
    Collections.emptyMap()));
wildcardConfig.put("timeout", "10s");
channelBuilder.defaultServiceConfig(
    Collections.singletonMap("methodConfig", Collections.singletonList(
        wildcardConfig)));

拦截器可以通过stub.withInterceptors()添加到存根中。创建一个将添加默认超时的拦截器,如下所示:

class TimeoutInterceptor implements ClientInterceptor {
  @Override public <ReqT,RespT> ClientCall<ReqT,RespT>  interceptCall(
      MethodDescriptor<ReqT,RespT> method, CallOptions callOptions, Channel next) {
    callOptions = callOptions.withDeadlineAfter(10, TimeUnit.SECONDS);
    return next.newCall(method, callOptions);
  }
}

stub = stub.withInterceptors(new TimeoutInterceptor());