我希望使用protobuf代替Json在消息队列之间进行通信。
当只有一个proto消息时,我知道该如何处理它。
假设proto文件为:
//person.proto
syntax = "proto3";
option java_outer_classname = "PersonProto";
message Person {
int32 id = 2;
string name = 1;
string email = 3;
}
现在,我可以用以下方法来处理它:
PersonProto.Person person = PersonProto.Person.newBuilder()
.setEmail("123@test.com")
.setId(1)
.setName("name-test")
.build();
byte[] bytes = person.toByteArray();
//Transfer from publisher to consumer between message queue.
//I can deserialise it, because i know the proto message is Person.
PersonProto.Person.parseFrom(bytes);
但如果有多个proto消息呢?
假设还有另一个名为Address
的proto消息。
syntax = "proto3";
option java_outer_classname = "PersonProto";
message Person {
int32 id = 2;
string name = 1;
string email = 3;
}
message Address {
string address = 1;
}
当消费者从消息队列中接收到字节数组时,如何知道它是哪个 Proto 消息?以及如何对字节数组进行反序列化?
Any
类型有一个parseFrom
方法 - https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/Any#parseFrom-java.io.InputStream- - Nick Holt