自从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]
捐赠说明