server如何调用 thrift_Thrift入门很简单
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入门很简单相关推荐
- mysql入门很简单系列视频-学习笔记
mysql入门很简单系列视频-学习笔记 视频链接:mysql入门很简单系列视频 https://www.bilibili.com/video/av14920200/ 以前主要就了解DDL.DML.DC ...
- 简单php修改mysql数据类型_MySQL入门很简单—MySQL数据类型
MySQL入门很简单---MySQL数据类型 一.整数类型: //类型名称字节数(长度)无符号数的取值范围有符号的取值范围 TINYNIT 1 (4)0~255-128~127 SMALLINT2 ( ...
- mysql入门很简单(一)
之前一直都只会一些mysql简单的操作,对mysql的理解也不是很熟悉,找了很多mysql的基础书籍,也不是很理想,后来发现一本<mysql入门很简单>发现还不错,看了两遍,mysql基础 ...
- 《Java Web开发入门很简单》学习笔记
<Java Web开发入门很简单>学习笔记 1123 第1章 了解Java Web开发领域 Java Web主要涉及技术包括:HTML.JavaScript.CSS.JSP.Servlet ...
- 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)...
1.前言与作者 首先声明,我是由于非常偶然的机会获得<C语言入门很简单>这本书的,绝对不是买的.买这种书实在丢不起那人. 去年这书刚出版时,在CU论坛举行试读推广,我当时随口说了几句(没说 ...
- ARM Cortex M0权威指南_PDF电子书下载 带书签目录 高清完整版 http://pan.baidu.com/s/1jGKQSwY MariaDB入门很简单_PDF电子书下载 带
ARM Cortex M0权威指南_PDF电子书下载 带书签目录 高清完整版 http://pan.baidu.com/s/1jGKQSwY MariaDB入门很简单_PDF电子书下载 带 ...
- 《MySQL入门很简单》学习笔记(22)之第22章驾校学员管理系统(关键词:数据库/MySQL)
第22章 驾校学员管理系统 略. 参考文献: 1.<MySQL入门很简单>.
- CSS学习(上)前端入门很简单
@最好有HTML基础哦 一 CSS入门基础 为什么要在网页中加入CSS 浏览器与CSS 选择器类型 二 用CSS设置文本样式 设计网页中的文字样式 设计文本的段落样式 一 CSS入门基础 为什么要在网 ...
- 【连载】《linux入门很简单》电子版——作者:刘金鹏(序:一切的起因3)
1988 年,芬兰赫尔辛基大学迎来了一位新的大学生-- Linus Benedict Torvalds.当然,那时候他的名字在学校的花名册中并不显眼,但是一年后,他大二的时候,开始有故事了. 大学二年 ...
最新文章
- ajax-Ajax试题
- 中国采盐行业运营效益分析与项目投资可行性研究报告2022-2028年
- [BX]和loop指令03 - 零基础入门学习汇编语言25
- display:none和visibility:hidden两者的区别
- 科技前沿及论文写作相关视频
- 不小心合并了icloud通讯录_苹果手机怎么恢复通讯录联系人号码?原来方法竟如此简单!...
- 累加List对象中的某一个值
- 操作系统两大创始人反目,这个排名第九的 Linux 发行版 OS 何去何从?
- hdu 4355 Party All the Time
- HTML 标题h1-h6
- 查询linux ssh端口,查看ssh端口
- wps+for+linux+字体大小,WPS for Linux(ubuntu)字体配置(字体缺失解决办法)
- TYPE g_date_tbl_typ IS TABLE OF DATE INDEX BY VARCHAR2(1000);
- 苹果手机可以微信分身吗_微信和微信分身版有区别吗
- 大厂经典面试系列之三:唯品会大数据开发面试【建议关注收藏订阅,你早晚会用上】掌握了这些面试题,余生不在怕面试
- 剑指offer | 面试题54:二叉搜索树的第k大节点
- 3D Models (3D 模型)
- 磁盘阵列 and RAID技术简介
- 机器人程序设计入门(C++/Arduino/ROS)(转载2020版)
- 用R写一个迷宫小游戏
热门文章
- PowerDesigner16中的对象无效,不允许有扩展属性 问题的解决
- bash-shell高级编程--求最大公约数
- Working copy XXX locked and cleanup failed in SVN
- RPL的故事 ——《x86汇编语言:从实模式到保护模式》读书笔记31
- 【展开讲讲?xmind日常小知识】xmind2020插入表格
- 如何在 Linux 中使用 find
- 使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析
- 从@EnableRedisHttpSession谈谈Spring Session实现原理
- ORACLE SQL笛卡尔集
- C语言再学习 -- 时间函数