我有一个简单的原始文件,用于创建我的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-我需要。

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

由于似乎很容易解决,所以我在想:
  • 我是否缺少一些使该构造函数向我公开的选项?
  • 是否打算将ojit_code对象设置在我尚未找到的其他地方?
  • 最佳答案

    MyServerGrpc扩展了AbstractStubAbstractStub具有with*方法,这些方法与CallOptions上的方法相同。

    因此,您想要执行以下操作:

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

    10-07 22:31