Thrift是什么?

是Facebook开源的跨语言RPC框架。

实战

这里实现一个简单的服务CalculatorService。引入maven依赖

org.apache.thrift

libthrift

0.9.2

编写Thrift接口定义文件

Thrift接口定义(IDL)文件采用抽象注解的方式说明类型信息,用于告知thrift代码生成器如何生成相应语言的接口或者方法声明。

namespace java com.vonzhou.learn.rpc

service CalculatorService {

/*** A method definition looks like C code. It has a return type, arguments,* and optionally a list of exceptions that it may throw. Note that argument* lists and exception lists are specified using the exact same syntax as* field lists in struct or exception definitions.*/

void ping(),

i32 add(1:i32 num1, 2:i32 num2),

}使用Thrift compiler根据IDL文件生成对应的源文件

这里仅仅配置了Java命名空间,运行上述命令后会生成CalculatorService.java文件。实现服务接口CalculatorService.Iface

public class CalculatorServiceHandler implements CalculatorService.Iface{

public void ping() throws TException {

System.out.println("ping");

}

public int add(int num1, int num2) throws TException {

return num1 + num2;

}

}实现Thrift Server

public class ThriftServer {

public static void start(CalculatorService.Processor processor) {

try {

/*** 服务器端传输层初始化*/

TServerTransport serverTransport = new TServerSocket(9090);

/*** Thrift Server 这里采用简单单线程实现, 用于测试环境*/

TServer server = new TSimpleServer(new TServer.Args(serverTransport).processor(processor));

System.out.println("Starting the simple thrift server...");

/*** 启动服务*/

server.serve();

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

start(new CalculatorService.Processor(new CalculatorServiceHandler()));

}

}实现Thrift Client

public class ThriftClient {

public static void main(String[] args) {

try {

TTransport transport = new TSocket("localhost", 9090);

/*** Opens the transport for reading/writing.*/

transport.open();

/*** 指定具体的 protocol*/

TProtocol protocol = new TBinaryProtocol(transport);

/*** TServiceClient :通过 protocol 和 transport 与具体的服务通信,理解为 Stub*/

CalculatorService.Client client = new CalculatorService.Client(protocol);

/*** RPC call*/

System.out.println(client.add(100, 200));

transport.close();

} catch (TTransportException e) {

e.printStackTrace();

} catch (TException x) {

x.printStackTrace();

}

}

}

理解

TTransport:IO层的封装抽象,打开关闭,读写传输层,TTransport具体对应有不同的实现:

TServerTransport:服务器端IO层抽象,用于listen, accept连接请求。

TSocket:是TTransport基于socket的实现,同样的,TServerSocket是TServerTransport 基于socket的实现, 是Thrift中对ServerSocket的包装。

TProtocol:表示RPC通信的消息传输格式,实现有二进制(TBinaryProtocol),JSON(TJSONProtocol)格式等。

参考

server如何调用 thrift_Thrift入门很简单相关推荐

  1. mysql入门很简单系列视频-学习笔记

    mysql入门很简单系列视频-学习笔记 视频链接:mysql入门很简单系列视频 https://www.bilibili.com/video/av14920200/ 以前主要就了解DDL.DML.DC ...

  2. 简单php修改mysql数据类型_MySQL入门很简单—MySQL数据类型

    MySQL入门很简单---MySQL数据类型 一.整数类型: //类型名称字节数(长度)无符号数的取值范围有符号的取值范围 TINYNIT 1 (4)0~255-128~127 SMALLINT2 ( ...

  3. mysql入门很简单(一)

    之前一直都只会一些mysql简单的操作,对mysql的理解也不是很熟悉,找了很多mysql的基础书籍,也不是很理想,后来发现一本<mysql入门很简单>发现还不错,看了两遍,mysql基础 ...

  4. 《Java Web开发入门很简单》学习笔记

    <Java Web开发入门很简单>学习笔记 1123 第1章 了解Java Web开发领域 Java Web主要涉及技术包括:HTML.JavaScript.CSS.JSP.Servlet ...

  5. 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)...

    1.前言与作者 首先声明,我是由于非常偶然的机会获得<C语言入门很简单>这本书的,绝对不是买的.买这种书实在丢不起那人. 去年这书刚出版时,在CU论坛举行试读推广,我当时随口说了几句(没说 ...

  6. ARM Cortex M0权威指南_PDF电子书下载 带书签目录 高清完整版 http://pan.baidu.com/s/1jGKQSwY MariaDB入门很简单_PDF电子书下载 带

    ARM  Cortex  M0权威指南_PDF电子书下载 带书签目录 高清完整版   http://pan.baidu.com/s/1jGKQSwY   MariaDB入门很简单_PDF电子书下载 带 ...

  7. 《MySQL入门很简单》学习笔记(22)之第22章驾校学员管理系统(关键词:数据库/MySQL)

    第22章 驾校学员管理系统 略. 参考文献: 1.<MySQL入门很简单>.

  8. CSS学习(上)前端入门很简单

    @最好有HTML基础哦 一 CSS入门基础 为什么要在网页中加入CSS 浏览器与CSS 选择器类型 二 用CSS设置文本样式 设计网页中的文字样式 设计文本的段落样式 一 CSS入门基础 为什么要在网 ...

  9. 【连载】《linux入门很简单》电子版——作者:刘金鹏(序:一切的起因3)

    1988 年,芬兰赫尔辛基大学迎来了一位新的大学生-- Linus Benedict Torvalds.当然,那时候他的名字在学校的花名册中并不显眼,但是一年后,他大二的时候,开始有故事了. 大学二年 ...

最新文章

  1. ajax-Ajax试题
  2. 中国采盐行业运营效益分析与项目投资可行性研究报告2022-2028年
  3. [BX]和loop指令03 - 零基础入门学习汇编语言25
  4. display:none和visibility:hidden两者的区别
  5. 科技前沿及论文写作相关视频
  6. 不小心合并了icloud通讯录_苹果手机怎么恢复通讯录联系人号码?原来方法竟如此简单!...
  7. 累加List对象中的某一个值
  8. 操作系统两大创始人反目,这个排名第九的 Linux 发行版 OS 何去何从?
  9. hdu 4355 Party All the Time
  10. HTML 标题h1-h6
  11. 查询linux ssh端口,查看ssh端口
  12. wps+for+linux+字体大小,WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
  13. TYPE g_date_tbl_typ IS TABLE OF DATE INDEX BY VARCHAR2(1000);
  14. 苹果手机可以微信分身吗_微信和微信分身版有区别吗
  15. 大厂经典面试系列之三:唯品会大数据开发面试【建议关注收藏订阅,你早晚会用上】掌握了这些面试题,余生不在怕面试
  16. 剑指offer | 面试题54:二叉搜索树的第k大节点
  17. 3D Models (3D 模型)
  18. 磁盘阵列 and RAID技术简介
  19. 机器人程序设计入门(C++/Arduino/ROS)(转载2020版)
  20. 用R写一个迷宫小游戏

热门文章

  1. PowerDesigner16中的对象无效,不允许有扩展属性 问题的解决
  2. bash-shell高级编程--求最大公约数
  3. Working copy XXX locked and cleanup failed in SVN
  4. RPL的故事 ——《x86汇编语言:从实模式到保护模式》读书笔记31
  5. 【展开讲讲?xmind日常小知识】xmind2020插入表格
  6. 如何在 Linux 中使用 find
  7. 使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析
  8. 从@EnableRedisHttpSession谈谈Spring Session实现原理
  9. ORACLE SQL笛卡尔集
  10. C语言再学习 -- 时间函数