Exception while invoking! org.apache.thrift.protocol.TProtocolException: Bad version in readMessageB
问题描述:
在使用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相关推荐
- [zz]Apache Thrift学习小记
参考: http://incubator.apache.org/thrift/ http://wiki.apache.org/thrift/FrontPage http://jnb.ociweb.co ...
- Apache Thrift的使用
为什么80%的码农都做不了架构师?>>> Thrift是什么,看这里:http://thrift.apache.org/ 1.从官网下载thrift Thrift官网:http ...
- apache thrift_使用Java快速入门的Apache Thrift
apache thrift Apache Thrift是由facebook创建的RPC框架,现在它是一个Apache项目. Thrift允许您在不依赖语言的定义文件中定义数据类型和服务接口. 该定义文 ...
- 使用Java快速入门的Apache Thrift
Apache Thrift是由facebook创建的RPC框架,现在它是一个Apache项目. Thrift可让您在不依赖语言的定义文件中定义数据类型和服务接口. 该定义文件用作编译器的输入,以生成用 ...
- Apache Thrift - 可伸缩的跨语言服务开发框架
简介: Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Java 开发人员角度详细介绍 Apache Thrift 的架构.开发和部 ...
- Apache Thrift 官网学习 一 基本概述与入门
文章目录 一 基本概述与入门 1.1 官网知识 1.2 下载安装 1.3 基本数据结构 1.4 基本案例入门 1.4.1 编写thrift文件 1.4.2 新建springBoot项目 1.4.3 生 ...
- Windows 10 Visual Studio 2017 安装配置 Apache Thrift (C++)
最近需要使用Thrift,所以在网上看了很多资料,不过很多教程都不够详细完整,导致我花了不少时间安装配置.在这里我把我配置的过程写下来和大家分享. 1 介绍 Apache Thrift 是一个跨语言的 ...
- Exception in thread main org.apache.thrift.transport.TTransportException: Could not create ServerS
Exception in thread "main" org.apache.thrift.transport.TTransportException: Could not crea ...
- RPC框架实践之:Apache Thrift
一.概述 RPC(Remote Procedure Call)即 远程过程调用,说的这么抽象,其实简化理解就是一个节点如何请求另一节点所提供的服务.在文章 微服务调用链追踪中心搭建 一文中模拟出来的调 ...
最新文章
- STM8单片机GPIO口的驱动深度解析
- form表单提交,Servlet接收并读取Excel文件
- 说实话,Intellij IDEA 自带的 Vim 插件真心不错!
- 【编译原理】递归下降的预测分析(真の能看懂~!)
- 在eclipse里配置Android ndk环境 适用于windows mac 和linux[转]
- linux借助expect完成自动登录
- 哗啦啦用Java_哗啦啦
- 语音信号处理基础(五)——语音分帧与加窗
- 逻辑回归(Logistic Regression)学习笔记
- (转)机会还是陷阱:诺亚财富的私募股权策略
- 如何恢复丢失的分区及文件
- Android MediaPlayer播放raw资源封装类
- grub.conf解析
- ◎Vbs调用MsAgent组件,很有趣
- KeyMob移动广告聚合平台飙升您的移动广告收益
- w ndows系统启动日志ID,查看windows系统日志方法
- 常用的默认端口号(HTTP\HTTPS\FTP)
- 【CUDA学习笔记】4.锁页内存(pinned memory or page locked memory)
- kubernetes进阶之路(十六)~~~Storage系列之StorageClass
- 在python中gevent monkey_patch 出现Monkey-patching may lead to errors解决
热门文章
- python实现微信小游戏打飞机代码
- SparkSQL: no typetag available for xxxx问题的解决办法
- java ceilingentry_java.util.TreeMap.ceilingKey()方法实例
- 设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1)
- python调用oracle存,Python使用cx_Oracle调用Oracle存储过程的方法示例
- 用java二分法计算a的n次幂_用二分法计算a的n次幂算法分析
- python中metaclass的理解
- mysql 过滤单引号_python实现mysql的单引号字符串过滤方法
- 谷歌浏览器 检查功能_谷歌Chrome浏览器添加新功能,爱”吃“内存有应对之策?...
- php发送邮件时间间隔,在使用phpmailer群发邮件时如何设置发送的时间间隔?