美文网首页
跟我学Thrift 4:由浅入深Thrift文件

跟我学Thrift 4:由浅入深Thrift文件

作者: whplcyz | 来源:发表于2018-11-25 22:03 被阅读0次

    我们以顾客下单买车为例子,来深入了解下Thrift的一些细节

    1.自定义标识符VS自动标识符

    2.Optional VS Required VS Default

    3.struct的组合(struct不支持继承)

    首先是Thrift文件定义如下:

    namespace java com.whp.demo.thrift.optional

    struct Car {

    1:required i32 carId,

    2:required string carName,

    3:required i64 price,

    4: optional i16 age=0

    }

    struct Consumer{

    1:required i32 consumerId,

    2:optional string name

    }

    struct Order{

    required i64 orderId,

    required Car car,

    required Consumer consumer,

    }

    service CarService{

    Order createBuyCarOder(1:required Car car, 2:required Consumer consumer)

    }

    include "other.thrift"      //包含其它的thrift文件

    namespace java com.whp.demo   //java下的namespace com.whp.demo

    typedef i32 int;   //tydef 语法

    typedef i64 long;

    enum Player {

        JAVA = 0;

        FLASH = 1;

    }

    Required VS Opetional

    #required:一定会被序列号,并且如果没有被复制,将会被提醒

    #optional:如果没有被赋值,将不会被序列化。如果有默认值,则将会被序列化成默认值。具有一定的向后兼容性。

    #default: 默认情况下是 req-in,opt-out即 对于write stream默认是required,对于read stream是optional

    整数编号

    #如果一个程序分开来开发,那版本问题就是绕不过去的问题。Thrift的版本是通过“field identifiers”来实现的,每个结构由其标识,结构中的每个域有其标识,这两个标识唯一决定了一个数据域。在解码的时候,数据域的标识被检查,如果不能识别,则该数据域被抛弃.

    用户自定义编号是从1开始的正整数

    默认编号是从-1 开始递减。

    struct Order{

    required i64 orderId,

    required Car car,

    required Consumer consumer,

    }

    比如这个,编译后会成为:

    ORDER_ID((short)-1,"orderId"),

    CAR((short)-2,"car"),

    CONSUMER((short)-3,"consumer");

    Struct组合

    struct Order{

    required i64 orderId,

    required Car car,

    required Consumer consumer,

    }

    我们可以直接在Order中组合Car和Consumer

    相关文章

      网友评论

          本文标题:跟我学Thrift 4:由浅入深Thrift文件

          本文链接:https://www.haomeiwen.com/subject/rummqqtx.html