问题描述:

在使用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相关推荐

  1. [zz]Apache Thrift学习小记

    参考: http://incubator.apache.org/thrift/ http://wiki.apache.org/thrift/FrontPage http://jnb.ociweb.co ...

  2. Apache Thrift的使用

    为什么80%的码农都做不了架构师?>>>    Thrift是什么,看这里:http://thrift.apache.org/ 1.从官网下载thrift Thrift官网:http ...

  3. apache thrift_使用Java快速入门的Apache Thrift

    apache thrift Apache Thrift是由facebook创建的RPC框架,现在它是一个Apache项目. Thrift允许您在不依赖语言的定义文件中定义数据类型和服务接口. 该定义文 ...

  4. 使用Java快速入门的Apache Thrift

    Apache Thrift是由facebook创建的RPC框架,现在它是一个Apache项目. Thrift可让您在不依赖语言的定义文件中定义数据类型和服务接口. 该定义文件用作编译器的输入,以生成用 ...

  5. Apache Thrift - 可伸缩的跨语言服务开发框架

    简介: Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Java 开发人员角度详细介绍 Apache Thrift 的架构.开发和部 ...

  6. Apache Thrift 官网学习 一 基本概述与入门

    文章目录 一 基本概述与入门 1.1 官网知识 1.2 下载安装 1.3 基本数据结构 1.4 基本案例入门 1.4.1 编写thrift文件 1.4.2 新建springBoot项目 1.4.3 生 ...

  7. Windows 10 Visual Studio 2017 安装配置 Apache Thrift (C++)

    最近需要使用Thrift,所以在网上看了很多资料,不过很多教程都不够详细完整,导致我花了不少时间安装配置.在这里我把我配置的过程写下来和大家分享. 1 介绍 Apache Thrift 是一个跨语言的 ...

  8. 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 ...

  9. RPC框架实践之:Apache Thrift

    一.概述 RPC(Remote Procedure Call)即 远程过程调用,说的这么抽象,其实简化理解就是一个节点如何请求另一节点所提供的服务.在文章 微服务调用链追踪中心搭建 一文中模拟出来的调 ...

最新文章

  1. STM8单片机GPIO口的驱动深度解析
  2. form表单提交,Servlet接收并读取Excel文件
  3. 说实话,Intellij IDEA 自带的 Vim 插件真心不错!
  4. 【编译原理】递归下降的预测分析(真の能看懂~!)
  5. 在eclipse里配置Android ndk环境 适用于windows mac 和linux[转]
  6. linux借助expect完成自动登录
  7. 哗啦啦用Java_哗啦啦
  8. 语音信号处理基础(五)——语音分帧与加窗
  9. 逻辑回归(Logistic Regression)学习笔记
  10. (转)机会还是陷阱:诺亚财富的私募股权策略
  11. 如何恢复丢失的分区及文件
  12. Android MediaPlayer播放raw资源封装类
  13. grub.conf解析
  14. ◎Vbs调用MsAgent组件,很有趣
  15. KeyMob移动广告聚合平台飙升您的移动广告收益
  16. w ndows系统启动日志ID,查看windows系统日志方法
  17. 常用的默认端口号(HTTP\HTTPS\FTP)
  18. 【CUDA学习笔记】4.锁页内存(pinned memory or page locked memory)
  19. kubernetes进阶之路(十六)~~~Storage系列之StorageClass
  20. 在python中gevent monkey_patch 出现Monkey-patching may lead to errors解决

热门文章

  1. python实现微信小游戏打飞机代码
  2. SparkSQL: no typetag available for xxxx问题的解决办法
  3. java ceilingentry_java.util.TreeMap.ceilingKey()方法实例
  4. 设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1)
  5. python调用oracle存,Python使用cx_Oracle调用Oracle存储过程的方法示例
  6. 用java二分法计算a的n次幂_用二分法计算a的n次幂算法分析
  7. python中metaclass的理解
  8. mysql 过滤单引号_python实现mysql的单引号字符串过滤方法
  9. 谷歌浏览器 检查功能_谷歌Chrome浏览器添加新功能,爱”吃“内存有应对之策?...
  10. php发送邮件时间间隔,在使用phpmailer群发邮件时如何设置发送的时间间隔?