Предполагая, что A и B совместимы (одинаковые теги имеют одинаковый тип), вы можете сериализовать обратно свой прото и снова проанализировать его.Это также будет работать, если некоторые теги отсутствуют в одном объекте, но синтаксический анализ в основном завершится неудачей, если существуют два тега с разными типами.
Proto:
Message A {
string aa = 1;
int32 aaaa = 2;
int32 a_only = 3;
}
Message B {
string bb = 1;
int32 bbbb = 2;
string b_only = 4; // Must not be 3.
}
Java:
A a = GetAFromQueue();
B b = B.parseFrom(a.toByteArray());
Другим (возможно, лучшим) вариантом было бы получить сообщение от Кафки в виде байтового массива и при необходимости проанализировать его в A или B.Это позволяет избежать повторной сериализации данных, хотя все еще актуальны те же теги с другим типом.
byte[] data = GetDataFromQueue();
A a = A.parseFrom(data);
[...]
B b = B.parseFrom(data);