gRPC protobuffers Java无法为BlockingStub设置Call​​Options

时间:2015-11-19 15:22:38

标签: java gradle protocol-buffers grpc

我有一个简单的proto文件,用于创建我的java类

syntax = "proto3";

option java_package = "some.project.grpc";
option java_multiple_files = true;

message PingRequest { }
message PingResponse { }

service MyServer {
    rpc Ping(PingRequest) returns (PingResponse);
}

使用gradle和google protobuf插件(https://github.com/google/protobuf-gradle-plugin)我用

创建我的课程
gradle generateProto

生成的MyServerGrpc有一个内部类MyServerBlockingStub,它有两个构造函数:

private MyServerBlockingStub(io.grpc.Channel channel) { ... }
private MyServerBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { ... }

MyServerGrpc类确实将第一个公开为newBlockingStub(io.grpc.Channel channel)而不公开第二个 - 我需要它。

像这样,我无法设置任何调用选项,例如超时。我可以轻松地操作生成的文件以允许我访问我需要的构造函数,但是这些更改将在下一代中丢失 - 所以它不是真正的选项。

因为看起来这么简单,所以我在想:

  • 我是否遗漏了一些将此构造函数暴露给我的选项?
  • 是否打算将CallOptions对象设置在我尚未找到的其他位置?

1 个答案:

答案 0 :(得分:3)

MyServerGrpc延伸AbstractStubAbstractStubwith*个方法镜像CallOptions上的方法。

所以你想做类似的事情:

newBlockingStub(yourChannel).withDeadlineAfter(1, TimeUnit.MINUTES)