Thrift IDL使用方式

 

I.背景

众所周知,Thrift是一个RPC的框架,其可用于不同语言之间的服务相互调用。比如最近接触到的一个运用环境:
*前端使用Node.Js重构了部分我们的老旧代码(前后端未分离的SpringBoot项目),我们后端使用zookeeper+Thrift为新的Node.Js前端项目提供基本的DAO层服务支持*
所以基于这个项目,我大概了解了一下Thrift,该文章则均以Java为基础语言。


II.如何入门

因为后端已经有一套服务注册和暴露机制,所以服务已经是RPC的形式,所以我们仅需要使用Thrift IDL来重写一遍我们需要暴露的方法即可,Thrift IDL有两个比较好的参考选择:

  • Thrift 类型说明可以参考官方文档: Thrift Type,简单来说,thrift基本支持所有的Java基本类型以及引用类型:bool(boolean)、byte(byte)、i16(short)、i32(int)、i64(long)、double(double)、string(String)、binary(byte[])以及一些常用容器和自建类型(Struct);
  • Thrift IDL的书写规范则可以参考Thrift: The Missing Guide,这个文档相较于官方文档有更多的例子可以参考。

III.TIPS

  • 很多参考和学习文档,都将servicesstruct放在一个.thrift文件中,这种方式将service和其所需的struct绑定在一起,会导致个别struct重复出现在多个.thrift文件中,导致大量的代码重复。所以,应该与Java的编码风格保持一致,采用POJO类(struct)+接口(services)的方案,利用include关键字,将struct引进services中使用
  • Thrift支持基本所有的Java基本类型,但是注意是基本类型,类似于Java中的Integer、Boolean、Long、Double等基本类型包装类是不支持的,或许你可以使用struct实现一个类似的包装类结构进行数据承载。
  • Thrift支持enum枚举类型,但是如果没有description的枚举类型也可以直接使用string来承接。
  • Thrift是通过序列化和反序列化来获取对应struct结构体的数据的,所以struct中的数据顺序一定要和java文件中的一致,否则可能会出现数据对应关系错乱或者数据丢失。
  • 在编写struct体时,要注意java对象父级,如果父级中含有变量,不要忘记其变量的书写,且顺序一定在前面。
  • 如非必要,java对象中的常量可以不出现在thrift idlstruct结构体中。
  • 时间Date我们固定使用
    关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信