0

Hadoop RPC エンジンは、プロトコル バッファを使用して、ワイヤからのバイトをエンコード/デコードします。

HadoopRpcRequestProto を使用して Hadoop サーバーでメソッドを呼び出そうとしています

HadoopRpcRequestProto rpcReHadoopRpcRequestProtoquest;
    HadoopRpcRequestProto.Builder builder =   HadoopRpcRequestProto.newBuilder();
    builder.setMethodName("foo");

したがって、私の「foo」メソッドが 2 つのパラメーターを取る場合、foo(String name, int num);

パラメータをエンコードして HadoopRpcRequestProto のリクエスト フィールドに設定するにはどうすればよいですか?

ティア

4

1 に答える 1

1

次のようなことができるはずです。

private HadoopRpcRequestProto constructRpcRequest(Method method, Object paramObj) {
  HadoopRpcRequestProto rpcRequest;
  HadoopRpcRequestProto.Builder builder = HadoopRpcRequestProto
      .newBuilder();
  builder.setMethodName(method.getName());

  Message param = (Message) paramObj;
  builder.setRequest(param.toByteString());
  rpcRequest = builder.build();
  return rpcRequest;
}

Message私たちが話しているクラスのためにcom.google.protobuf.Message。Javaバインディングを生成するには、.protoファイルを作成してコンパイルする必要があると思いますprotoc。その後、Javaコードで使用できます。たとえば、.proto ファイルは次のようになります。

message Person {
  required int32 id = 1;
  required string name = 2;
  optional string email = 3;
}

そして、これを行うと、次のような内部クラスを持つprotoc myperson.protoクラスが生成されます。MyPerson.javaPerson

public static final class Person extends
  com.google.protobuf.GeneratedMessage
  implements PersonOrBuilder {
   ...
}

このGeneratedMessageクラスは、上で述べたインターフェースをAbstractMessage実装するものから拡張されます。Messageしたがって、基本的にはPersonオブジェクトを作成でき、builder.setRequest(person.toByteString()).

于 2013-01-23T19:10:55.813 に答える