thrift是个跨语言的远程过程调用(RPC)服务,支持client和server以多种语言通讯。
可以在源代码lib/java中获得jar包。代码、接口示例可参考thrift源代码中的tutorial/tutorial.thrift,tutorial/java。使用:
一、定义接口IDL:xxx.thrift。支持的数据类型有:bool;byte: 有符号字节;i16: 16位有符号整型;i32: 32位有符号整型;i64: 64位有符号整型;double: 64位浮点型;string。其他类型有list、set、map、struct、exception、enum等。包用namespace/include声明/调用(类似c++)。服务接口用service声明,其中声明多个接口。
namespace java com.thrift.test.user //需要指定语言,否则生成代码报错。
struct User { //不支持继承
1: required i32 id; //每个域都有一个唯一数字标签,这些数字标签在传输时用来确定域
2: required string name;
}
service UserService {
i32 getId(1: User user);
void setName(1: User user, 2: string s);
}
参考:http://www.cnblogs.com/tianhuilove/archive/2011/09/05/2167669.html
二、通过thrift.exe,将IDL生成为代码,如thrift.exe -r -gen java test.thrift(-r对其中include的文件也生成服务代码)。生成的类有2个,User.java和UserService.java,分别对应结构体和服务。若有多个结构体或多个服务,就会生成多个对应的类。除此之外,若接口中定义了const常量,还会生成一个xxxConstants类。
在User.java中IDL结构体的域对应为_Fields,是一个enum型,这也就理解了定义中域的数字标签的意义,可以根据数字标签找到相应的域
public static _Fields findByThriftId(int fieldId) {
switch(fieldId) {
case 1: // ID
return ID;
case 2: // NAME
return NAME;
default:
return null;
}
}
另外,在该类中还提供了与的get/set、比较、toString、序列化以及read/write等操作
在UserService类中定义了Iface、AsyncIface接口以及client、AsyncClient、Processor、AsyncProcessor等类,其中有对接口方法的send_xxx,recv_xxx等操作,不需要动这个类。
三、自定义服务处理类UserHandler实现UserService.Iface/AsyncIface接口。其中对服务方法进行具体处理。
四、构建服务端监听方法。
public static void server() {
try {
Calculator.Processor processor = new UserService.Processor(new UserHandler());
TServerTransport serverTransport = new TServerSocket(9090);
TServer server = new TSimpleServer(new Args(serverTransport).processor(processor));
// Use this for a multithreaded server
// TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor));
server.serve();
} catch (Exception e) {
e.printStackTrace();
}
}
五、构建客户端请求方法。
public static void main(String [] args) {
try {
TTransport transport = new TSocket("xxxx", 9090);
transport.open();
TProtocol protocol = new TBinaryProtocol(transport);
UserService.Client client = new UserService.Client(protocol);
perform(client); //调用接口提供的服务
transport.close();
} catch (TException x) {
x.printStackTrace();
}
}
分享到:
相关推荐
Golang通过Thrift框架完美实现跨语言调用
RPC(Remote Procedure Call Protocol)远程过程调用协议实例,学习和使用thrift无痛入门代码。具体使用方法,可以看博客详解。
这是Apache Thrift框架的一个简单示例,用于在多语言环境中进行远程服务调用。不要积分啊,旨在进行技术交流。邮箱:whdsmile@163.com,欢迎来信!
压缩包分为三个部分,java工程(java的服务方,和java客户端) ...然后就可以使用线下的php直接调用, 代码是从网上找到的,比较容易入门 当然也可以直接导入java目录下的java工程,直接运行服务端更简单
使用wireshark抓取thrift协议接口调用
基于Thrift的跨编程语言Flex应用框架研究_吴洲.pdf
Apache Thrift——可伸缩的跨语言服务开发框架
【Thrift之C++远程调用helloworld菜鸟教程】
使用thrift、websocket在javascript和c++之间建立rpc调用机制。 如果要使用js+html来写界面,cpp来写底层业务逻辑,这就非常有用了。 当然,如果底层不用cpp来写,也可以参考本代码的js对thrift的rpc包装。
Thrift通过IDL(Interface Definition Language,接口定义语言)来定义RPC(Remote Procedure Call,远程过程调用)的接口和数据类型,然后通过thrift编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, ...
Thrift的简单使用demo
Thrift之QT远程调用(银河麒麟高级服务器版V10操作系统)
thrift是一种可伸缩的跨语言服务的发展软件框架。它结合了功能强大的软件堆栈的代码生成引擎,以建设服务,工作效率和无缝地与C + +,C#,Java,Python和PHP和Ruby结合。thrift是facebook开发的,我们现在把它作为...
网上一直搜不到Windows下QT使用thrift的例子,自己整了个 QT版本 5.8.0 Boost版本 boost_1_61_0 Thrift版本 thrift-0.10.0
thrift PC可执行文件,老版本thrift PC可执行文件
java代码使用thrift2操作hbase示例,thrift2连接hbase添加数据,单条查找,删除数据,根据扫描器查找,修改数据等测试实例
一个简单的demo,关于使用thrift进行跨语言服务间的通信
Thrift RPC客户端的服务化框架代码,
Thrift中实现Java与Python的RPC互相调用示例代码;Thrift中实现Java与Python的RPC互相调用示例代码;Thrift中实现Java与Python的RPC互相调用示例代码
HARPC(High Availability RPC)是基于Thrift的跨语言、高可用的RPC框架。具备高性能、高可用、轻量级等特点 * 跨语言通信 * 方便的使Java、Python、C++三种程序可以相互通信 * 负载均衡和容灾处理 * 方便的实现...