我有一个简单的原始文件,用于创建我的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 选项,例如超时。我可以轻松地操作生成的文件,以允许我访问所需的构造函数,但是这些更改将在下一代中丢失-因此,这并不是一个选择。
由于似乎很容易解决,所以我在想:
最佳答案
MyServerGrpc
扩展了AbstractStub
。 AbstractStub
具有with*
方法,这些方法与CallOptions
上的方法相同。
因此,您想要执行以下操作:
newBlockingStub(yourChannel).withDeadlineAfter(1, TimeUnit.MINUTES)