gRPC 和 ExtensionRegistry

gRPC and ExtensionRegistry

我将 gRPC 与 Java 一起使用,我发送的消息可能包含扩展名。在 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.

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

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

ProtoLiteUtils.setExtensionRegistry()

来自开发者的说明:这个 API 不稳定,一旦我们有了更合适的长期解决方案(每个方法都有自定义注册表等),很可能会改变

more info

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

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

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

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

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