Exception while invoking! org.apache.thrift.protocol.TProtocolException: Bad version in readMessageB
来源:互联网 发布:阿里云1m带宽慢不慢 编辑:程序博客网 时间:2024/06/11 01:09
问题描述:
在使用thrift做开发的时候出现下面的问题:
[dp]2014-12-0217:55:23.520 WARN [Thread-4][AbstractNonblockingServer.java:520] - Exception while invoking!
org.apache.thrift.protocol.TProtocolException:Bad version in readMessageBegin
atorg.apache.thrift.protocol.TBinaryProtocol.readMessageBegin(TBinaryProtocol.java:195)~[libthrift-0.9.1.jar:0.9.1]
atorg.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:27)~[libthrift-0.9.1.jar:0.9.1]
at org.apache.thrift.server.AbstractNonblockingServer$FrameBuffer.invoke(AbstractNonblockingServer.java:516)~[libthrift-0.9.1.jar:0.9.1]
atorg.apache.thrift.server.TNonblockingServer.requestInvoke(TNonblockingServer.java:115)[libthrift-0.9.1.jar:0.9.1]
at org.apache.thrift.server.AbstractNonblockingServer$AbstractSelectThread.handleRead(AbstractNonblockingServer.java:210)[libthrift-0.9.1.jar:0.9.1]
atorg.apache.thrift.server.TNonblockingServer$SelectAcceptThread.select(TNonblockingServer.java:202)[libthrift-0.9.1.jar:0.9.1]
atorg.apache.thrift.server.TNonblockingServer$SelectAcceptThread.run(TNonblockingServer.java:158)[libthrift-0.9.1.jar:0.9.1]
该问题出现的原因是客户端与服务器端使用的协议格式不一样导致;
服务器端代码为:
TProcessor tProcessor = new TestThriftService.Processor<TestThriftService.Iface>(m_TestThriftService);TNonblockingServerSocket tnbSocketTransport = new TNonblockingServerSocket(m_thriftPort);TNonblockingServer.Args tnbArgs = new TNonblockingServer.Args(tnbSocketTransport);tnbArgs.processor(tProcessor);tnbArgs.transportFactory(new TFramedTransport.Factory());tnbArgs.protocolFactory(new <span style="color:#cc0000;">TBinaryProtocol</span>.Factory());// 使用非阻塞式IO,服务端和客户端需要指定TFramedTransport数据传输的方式m_server = new TNonblockingServer(tnbArgs);
客户端代码为:
TestThriftService.Client getServiceClient(){TProtocol protocol = null;m_transport = new TFramedTransport(new TSocket(THRIFT_HOST,THRIFT_PORT, 2000));// 协议要和服务端一致protocol = new TCompactProtocol(m_transport);return new TestThriftService.Client(protocol);}
这个问题是开发过程中可以避免的错误,在thrift工作于nonblock模式时,必须使用TFramedTransport,另外一点是无论采用哪种模式,在协议格式上,Thrift客户端必须与Thrift服务器保持一直
- Exception while invoking! org.apache.thrift.protocol.TProtocolException: Bad version in readMessageB
- org.apache.thrift.protocol.TProtocolException: Required field 'sessionHandle' is unset! Struct:TExec
- nested exception is org.apache.ibatis.builder.BuilderException Error invoking SqlProvider method
- tomcat报错org.apache.tomcat.util.modeler.BaseModelMBean.invoke Exception invoking method manageApp
- 今天用MyEclopse8.5做hibernate测试出现:org.apache.jasper.JasperException: Bad version number in .class file错误
- Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
- Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
- Exception while invoking getStats of class ClientNamenodeProtocolTranslatorPB over 故障分析
- exception in thread main org.apache.axis2.wsdl.codegen.CodeGen
- Exception in thread "main" org.apache.spark.SparkException: Application application_1498149692663_01
- Zookeeper异常Exception in thread "main" org.apache.zookeeper.KeeperExcep
- 解决Exception starting filter struts2 java.lang.UnsupportedClassVersionError: Bad version number in .class的问题
- 解决Exception starting filter struts2 java.lang.UnsupportedClassVersionError: Bad version number in .
- org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac. A full JDK (not ju
- org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac. A full JDK (not ju
- org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac. A full JDK (not ju
- org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac. A full JDK (not ju
- jetty部署出现org.apache.jasper.JasperException: PWC6345: There is an error in invoking javac. A full JD
- 【iOS开发】网络协议之HTTP协议
- this指针
- ubuntu系统使用 GDB 调试多文件的详细操作步骤
- 武汉什么样的企业工商年检需要审计报告
- 12_3
- Exception while invoking! org.apache.thrift.protocol.TProtocolException: Bad version in readMessageB
- 漏斗模型的头脑风暴
- 深入浅出DDoS攻击防御--攻击篇
- POJ3259 Wormholes 【SPFA判断负环】
- android5.0 renderthread对应用层影响的分析
- 判断点是否在多边形内(包括在多边形上)的一个算法
- Apache 多路复用模块(MPMs) - Prefork, Worker, Event
- Java中获取键盘输入值的三种方法
- 计算矩阵边缘元素之和