gRPC protobuffers Java 无法为 BlockingStub 设置 CallOptions
gRPC protobuffers Java cannot set CallOptions for BlockingStub
我有一个简单的原型文件,用于创建我的 java classes
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) 我使用
创建 classes
gradle generateProto
生成的 MyServerGrpc
有一个内部 class MyServerBlockingStub
有两个构造函数:
private MyServerBlockingStub(io.grpc.Channel channel) { ... }
private MyServerBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { ... }
MyServerGrpc
class 确实将第一个公开为 newBlockingStub(io.grpc.Channel channel)
但不是第二个 - 我需要。
像这样,我无法设置任何通话选项,例如超时。我可以轻松地操作生成的文件以允许我访问我需要的构造函数,但这些更改将在下一代中丢失 - 所以这不是一个真正的选择。
因为这看起来很容易解决,所以我在想:
- 我是否遗漏了一些会向我公开此构造函数的选项?
- 是否打算在我尚未找到的其他地方设置
CallOptions
对象?
MyServerGrpc
扩展 AbstractStub
。 AbstractStub
有 with*
方法镜像 CallOptions
.
所以你想做这样的事情:
newBlockingStub(yourChannel).withDeadlineAfter(1, TimeUnit.MINUTES)
我有一个简单的原型文件,用于创建我的 java classes
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) 我使用
创建 classesgradle generateProto
生成的 MyServerGrpc
有一个内部 class MyServerBlockingStub
有两个构造函数:
private MyServerBlockingStub(io.grpc.Channel channel) { ... }
private MyServerBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { ... }
MyServerGrpc
class 确实将第一个公开为 newBlockingStub(io.grpc.Channel channel)
但不是第二个 - 我需要。
像这样,我无法设置任何通话选项,例如超时。我可以轻松地操作生成的文件以允许我访问我需要的构造函数,但这些更改将在下一代中丢失 - 所以这不是一个真正的选择。
因为这看起来很容易解决,所以我在想:
- 我是否遗漏了一些会向我公开此构造函数的选项?
- 是否打算在我尚未找到的其他地方设置
CallOptions
对象?
MyServerGrpc
扩展 AbstractStub
。 AbstractStub
有 with*
方法镜像 CallOptions
.
所以你想做这样的事情:
newBlockingStub(yourChannel).withDeadlineAfter(1, TimeUnit.MINUTES)