【发布时间】:2021-03-23 20:46:50
【问题描述】:
我尝试在 dotnet 客户端中实现此 PR https://github.com/apache/pulsar/pull/8372。据我目前所知,为输入类生成消息模式的工作方式如下: 某些类 -> 此类的 .proto -> 来自此 .proto 的 google 包装器 -> 从包装器中获取 Descriptor 并继续进行序列化。
在集成测试中有一个例子可以做到这一点:
ProtobufNativeSchema<org.apache.pulsar.client.schema.proto.Test.TestMessage> protobufSchema
= ProtobufNativeSchema.of(org.apache.pulsar.client.schema.proto.Test.TestMessage.class)
TestMessage 是一个 .proto 定义:
syntax = "proto3";
package proto;
import "ExternalTest.proto";
option java_package = "org.apache.pulsar.client.schema.proto";
option java_outer_classname = "Test";
enum TestEnum {
SHARED = 0;
FAILOVER = 1;
}
message SubMessage {
string foo = 1;
double bar = 2;
message NestedMessage {
string url = 1;
string title = 2;
repeated string snippets = 3;
}
}
message TestMessage {
string stringField = 1;
double doubleField = 2;
int32 intField = 6;
TestEnum testEnum = 4;
SubMessage nestedField = 5;
repeated string repeatedField = 10;
proto.external.ExternalMessage externalMessage = 11;
}
我无法理解 .proto 是如何转换为 java 类的。有一个 proto 编译器 https://developers.google.com/protocol-buffers/docs/reference/java-generated 可以从 .proto 创建 java 类;但它需要手动调用,然后才能将类包含在代码库中并使用。看起来它在集成测试示例中“即时”运行,至少我无法在任何地方找到生成的类。
Reference for C# https://developers.google.com/protocol-buffers/docs/reference/csharp-generated 做同样的事情,但会生成 C# 源文件。
那么它在java客户端中究竟是如何工作的呢?
【问题讨论】:
-
标签应该是“apache-pulsar”:)
标签: java schema protocol-buffers native pulsar