0

我在 Java 中使用 gRPC,我发送的消息可能包含扩展。在Protobuf 文档中,他们说:

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.

问题是我如何ExtensionRegistry在使用 gRPC 作为客户端的代码中指定 (并且消息解析是在 gRPC 生成的代码中执行的)。

更新:gRPC 添加了对扩展的支持

ProtoLiteUtils.setExtensionRegistry()

开发人员的说明:此 API 不稳定,一旦我们有更合适的长期解决方案(每个方法使用自定义注册表等),很可能会发生变化

更多信息

4

2 回答 2

1

您可以使用最近添加的ProtoLiteUtils.setExtensionRegistry,它将在 0.14 版本中提供。

于 2016-04-19T15:33:23.620 回答
0

嗯,我在 GRPC 代码中找不到任何关于 ExtensionRegistry 的信息。可能是因为在 proto3 中删除了扩展,GRPC 选择不支持它们,即使您使用的是 proto2。

但是,作为一种解决方法,您始终可以序列化您的原型,然后再次解析它:

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

这会浪费大量资源来序列化和重新解析,但应该可以完成工作。(当然,这依赖于未知字段保存,这是 proto3 中删除的另一个功能,但您使用的是 proto2,所以它应该可以工作!)

于 2016-04-12T17:36:19.273 回答