Thrift版本升级调查记录

自从0.5.0之后,很长时间thrift的版本都没有动,后来似乎是换了一波人,把java代码部分接口层变动太多,以致于,在0.5.0和其他版本共同存在的情况下,问题较多,54chen特作调查,调查目标0.5.0 vs 0.9.1。

代码位置:https://github.com/54chen/thrift_test

第一轮:编译阶段

1.jar包为0.9.1的libthrift,cli为0.5.0的thrift。

gen-java生成,编译失败。

2.修正为0.9.1 libthrift和thrift cli。

gen-java生成,编译成功。

3.修正为0.5.0 libthrift和thrift cli。

gen-java生成,编译成功。

第二轮:交叉调用

  • client 0.9.1 -> server 0.5.0 一切正常
  • client 0.5.0 -> server 0.9.1 一切正常

第三轮:server包不对

  • server0.9.1 替换jar为0.5.0 libthrift : server启动失败 Caused by: java.lang.ClassNotFoundException: org.apache.thrift.TBaseProcessor
  • server0.5.0 替换jar为0.9.1 libthrift : server启动失败 java.lang.NoSuchMethodError: org.apache.thrift.server.TThreadPoolServer

第四轮:client包不对

  • client0.9.1 jar为0.5.0 : client启动失败 java.lang.IncompatibleClassChangeError: class com.xiaomi.miliao.thrift.Hello$Client has interface org.apache.thrift.TServiceClient as super class
  • client0.5.0 jar为0.9.1 : client启动失败 java.lang.IncompatibleClassChangeError: Implementing class

结论

  • thrift协议层不会有因为thrift升级而造成的版本的问题。
  • thrift多个版本的client无法同时存在。
  • thrift多个版本的server也无法同时存在。

测试代码位置:https://github.com/54chen/thrift_test


原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]

捐款订阅54chen
捐赠说明