3

Javaクラスを作成するための単純なprotoファイルがあります

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

生成された には、 2 つのコンストラクターを持つMyServerGrpc内部クラスがあります。MyServerBlockingStub

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

MyServerGrpcクラスは最初のものを公開しますが、2番目のものは公開しnewBlockingStub(io.grpc.Channel channel)ません-これは必要です。

このように、タイムアウトなどの呼び出しオプションを設定できません。生成されたファイルを簡単に操作して、必要なコンストラクターにアクセスできるようにすることはできますが、これらの変更は次世代では失われるため、実際にはオプションではありません。

とても簡単な修正のように思えるので、私は考えていました:

  • このコンストラクターを公開するオプションがありませんか?
  • CallOptions私がまだ見つけていない別の場所にオブジェクトを設定する意図はありますか?
4

1 に答える 1

6

MyServerGrpc伸びAbstractStubます。AbstractStubには、with*のメソッドをミラーリングするメソッドがありますCallOptions

だからあなたは次のようなことをしたい:

newBlockingStub(yourChannel).withDeadlineAfter(1, TimeUnit.MINUTES)
于 2015-11-19T17:53:20.143 に答える