JAVA基础之——Thrift原理及应用

1 是什么

  是为了解决facebook系统中各系统间大数据量的传输通信,以及系统之间语言环境不同需要跨平台的问题。

  是一种实现RPC的软件框架,自定义IDL(Interface description language)接口描述语言

2 为什么用

  当跨语言调用时,使用http是个比较好的访问协议,但是如果消费端不能使用http,而是以操作本地的api的方式来使用服务,那我们需要使用thrift,客户端和服务端之间传输协议分为文本和二进制,一般使用二进制类型传输。

3 框架流程

3.1 编写idl文件,demo.thrift

3.2 客户端 编写cs文件,封装对象

  数据发送 编码和封装 字节流转换 底层发送

3.3 服务端 编写java文件出,解析对象

  底层接收 字节流转换 解码和解析 分发请求 处理请求

4 thrift涉及技术点

4.1 基本数据类型

namespace java com.xxxx

struct ParameterSetting
{
  1: bool isShadow;
  2: i32 probability; //int
  3: double range; //64位浮点数
  4: string name;
  5: list<string> addressInfo;
  6: i64 scale; //long
  7: i16 height; //short
  8: byte sdFlag; //byte,8位有符号整数
  9: map<string,string> propaMap;
  10:set<Integer> errorSet;
  11: optional string id; //当该字段没有值的时候,不会被序列化输出
  12: AcuUnit acuUnit;
}

enum AcuUnit
{
  succ=0,
  fail=1,
}

const string COMMON_URL=“xxxx”

4.2 数据传输协议

4.2.1 TSimpleJSONProtocol

  Thrift对象转换成json TSimpleJSONProtocol提供json只写协议

  TBase接口反序列化和序列化时使用。Thrift序列化时根据idl中结构体定义的每个属性的序号顺序写入inputStream中,所以序号不能重复。

TBase obj

 TSerializer s=new TSerializer(new TSimpleJSONProtocol.Factory());

s.toString(obj);

  TCompactProtocol压缩格式,高效率的密集的二进制编码格式进行数据传输。

原文地址:https://www.cnblogs.com/guobm/p/9855810.html