0

Java で gRPC を使用していますが、送信するメッセージに拡張機能が含まれている場合があります。Protobuf docsでは、次のように述べています。

When parsing a message that might have extensions, you must provide an ExtensionRegistry in which you have registered any extensions that you want to be able to parse.

問題は、ExtensionRegistrygRPC をクライアントとして使用するコードで をどのように指定するかです (メッセージの解析は gRPC によって生成されたコード内で実行されます)。

更新: 拡張機能のサポートが gRPC に追加されました

ProtoLiteUtils.setExtensionRegistry()

開発者からのメモ:この API は安定しておらず、より適切な長期的な解決策 (メソッドごとのカスタム レジストリなど) が確立されると、変更される可能性が非常に高くなります。

より詳しい情報

4

2 に答える 2

1

最近追加され、0.14 リリースで利用可能になるProtoLiteUtils.setExtensionRegistryを使用できます。

于 2016-04-19T15:33:23.620 に答える
0

うーん、GRPC コードで ExtensionRegistry について何も見つかりません。proto3 で拡張機能が削除されたため、proto2 を使用している場合でも、GRPC がそれらをサポートしないことを選択した可能性があります。

ただし、回避策として、いつでもプロトをシリアル化してから再度解析できます。

message = MyType.parseFrom(message.toByteString(),
                           myExtensionRegistry);

これは、一連のリソースをシリアル化して再解析するために浪費しますが、仕事は完了するはずです。(もちろん、これは proto3 で削除された別の機能である未知のフィールド保存に依存していますが、proto2 を使用しているので、動作するはずです!)

于 2016-04-12T17:36:19.273 に答える