是什么?

  Thrift是一个跨语言的服务部署框架最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。

  究其原理,先不做研究。

类型系统

Thrift类型系统包括:

  • 预定义基本类型;
  • 常量;
  • 用户自定义结构体;
  • 容器类型;
  • 异常;
  • 服务定义;

1.预定义基本类型

  • bool:布尔类型(true or value),占一个字节
  • byte:有符号字节
  • i16:   16位有符号整型
  • i32:   32位有符号整型
  • i64:   64位有符号整型
  • double:64位浮点数
  • string:未知编码或者二进制的字符串
  • * 注意:thrift不支持无符号整型

2.常量

其中a处,分号是可选的,可有可无;支持十六进制赋值

3.自定义结构体

* 注意:结构体中的变量可以声明为required(必须的)/optional(可选的),如:

其中c处,代表Tweet这个结构体中,可以包含另一个结构体Location

4.容器类型

  • Thrift容器与类型密切相关,它与当前流行编程语言提供的容器类型相对应,采用java泛型风格表示的。Thrift提供了3种容器类型:
  • list<A>:一系列A类型的元素组成的有序表,元素可以重复
  • set<A>:一系列A类型的元素组成的无需表,每个元素唯一
  • map<A,B>:key/value键值对,key的类型是A且唯一,value类型是B

5.异常

6.服务定义

* 注意两个红框的地方

其它

1.文件包含

  Thrift允许thrift文件包含,用户需要使用thrift文件名作为前缀访问被包含的对象,如:

其中a处thrift文件名要用双引号,并以.thrift结尾,末尾没有逗号或分号

2.注释格式

使用

通过.thrift文件生成Java代码

  thrift -gen java thriftFileName.thrift

通过上面的命令将在与thrift文件同级的目录中生成namespace声明的目录结构,并将thriftFileName.java文件放在该目录下

Thrift——初学的更多相关文章

  1. java初学的分析

    java初学的分析第一阶段:入门阶段学习目标:简单项目开发学习内容:1.Java入门书籍,Java基础知识.关于Java入门级的书,给大家推荐过<Java编程思想>.<Java核心技 ...

  2. Java程序员的现代RPC指南(Windows版预编译好的Protoc支持C++,Java,Python三种最常用的语言,Thrift则支持几乎主流的各种语言)

    Java程序员的现代RPC指南 1.前言 1.1 RPC框架简介 最早接触RPC还是初学Java时,直接用Socket API传东西好麻烦.于是发现了JDK直接支持的RMI,然后就用得不亦乐乎,各种大 ...

  3. DDD初学指南

    去年就打算总结一下,结果新换的工作特别忙,就迟迟没有认真动手.主要内容是很多初学DDD甚至于学习很长时间的同学没有弄明白DDD是什么,适合什么情况.这世界上没有银弹,抛开了适合的场景孤立的去研究DDD ...

  4. 和 Thrift 的一场美丽邂逅

    一. 与 Thrift 的初识 也许大多数人接触 Thrift 是从序列化开始的.每次搜索 “java序列化” + “方式”.“对比” 或 “性能” 等关键字时,搜索引擎总是会返回一大堆有关各种序列化 ...

  5. gulp初学

    原文地址:gulp初学 至于gulp与grunt的区别,用过的人都略知一二,总的来说就是2点: 1.gulp的gulpfile.js  配置简单而且更容易阅读和维护.之所以如此,是因为它们的工作方式不 ...

  6. 初学seaJs模块化开发,利用grunt打包,减少http请求

    原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...

  7. Apache thrift RPC 双向通信

    在上一篇介绍Apache thrift 安装和使用,写了一个简单的demo,讲解thrift服务的发布和客户端调用,但只是单向的客户端发送消息,服务端接收消息.而客户端却得不到服务器的响应. 在不涉及 ...

  8. common-pool2 学习:thrift连接池的另一种实现

    对象池是一种很实用的技术,经典的例子就是数据库连接池.去年曾经从零开始写过一个thrift客户端连接池.如果不想重造轮子,可以直接在apache开源项目commons-pool的基础上开发. 步骤: ...

  9. thrift:swift项目笔记

    先声明:此swift不是Apple公司的那个swift开发语言,而是facebook的另一个开源项目. facebook的thrift IDL文件,如果默认用thrift -gen java生成jav ...

随机推荐

  1. ListView中EditText的数据加载错乱的问题

    我在ListView中用BaseAdapter的getView()方法加载适配器,每个Item里有一个TextView和一个EditText,当我在第一个EditText里面输入数据,比如1234时, ...

  2. Windows 下 玩转Node.JS

    vs一直是用的比较舒服的IDE,一直期望可以支持Node.JS.终于找到了一个工具 NTVS(Node.JS Tool For VS). 主页:https://nodejstools.codeplex ...

  3. Ibm-jQuery教程学习笔记

    一.概述 1.虽然 jQuery 本身并非一门新的语言.但是,学习其语法有助于我们熟练.灵活地使用它.回顾下我们熟悉的 CSS 语法,不难发现 jQuery 的语法与 CSS 有相似之处. jQuer ...

  4. RxJava+Retrofit+MVP构建的App——聚合资讯

    RtfRxMVP 聚合资讯APP,提供热点资讯,天气预报以及笑话精选服务,使用 Retrofit + RxJava + MVP 构建代码. Hello U 这是我的一个练习项目,第一次尝试运用 MVP ...

  5. Mysql笔记——DCL

    DCL数据库控制语言不同于程序设计语言,SQL语言(结构化查询语言)的组成部分包括了DCL数据库控制语言.   =============== 1.创建用户 语法:CREATE USER 用户名@地址 ...

  6. POJ3252——Round Number(组合数学)

    Round Numbers DescriptionThe cows, as you know, have no fingers or thumbs and thus are unable to pla ...

  7. Linux配置自建 YUM 软件存储库

    yum软件仓库的搭建方式有三种,分别是本地yum源,网络yum源,第三方软件仓库. 以下示例演示了搭建本地yum仓库的方法: 1. 删除 /etc/yum.repos.d/dvd.repo 这个仓库文 ...

  8. SQL Agent Job ->> 通过sys.sysprocesses的program_name字段来定位对应的Job

    ;WITH T AS ( SELECT 'SQLAgent - TSQL JobStep (Job 0x'+ ),)),) + ' : Step ' + )) + ')' filter, j.job_ ...

  9. spry菜单栏(二)

    自定义选项卡式面板构件 尽管使用属性检查器可以简化对选项卡式面板构件的编辑,但是属性检查器并不支持自定义的样式设置任务.您可以修改选项卡式面板构件的 CSS 规则,并创建根据自己的喜好设置样式的构件. ...

  10. EasyUi datagrid 表格分页例子

    1.首先引入 easyui的 css 和 js 文件 2.前台 需要写的js //源数据 function Async(action,args,callback){  $.ajax({  url: a ...