首页 > 解决方案 > 如何确定 thrift 消息的类型?

问题描述

我有一个管道有两种节俭消息进来

我可以尝试单独反序列化每个,看看它是否遇到错误

TDeserializer deserializer = new TDeserializer(new TSimpleJSONProtocol.Factory());

try {
   Type1Msg t1 = new Type1Msg();
   deserializer.deserialize(t1, json, "UTF-8");
   return t1
} catch() {

}

try {
   Type2Msg t2 = new Type2Msg();
   deserializer.deserialize(t1, json, "UTF-8");
   return t2
} catch() {

}

是否有一种惯用的方法可以在 Thrift 中实现反序列化多种消息类型?

标签: javathrift

解决方案


我已经在这里为 Python 回答了这个问题,但实际上这个话题与语言无关。

使用 Thrift union,或者struct带有非必填字段的 a 也可以:

union varying {
  1 : Type1Msg msg1
  2 : Type2Msg msg2
  // room for more 
}

进一步阅读:


推荐阅读