Thrift入门试用

标签: thrift | 发表时间:2014-07-30 19:43 | 作者:myhadoop
出处:http://www.iteye.com

 

在新的项目中公司在平台内部系统间使用Thrift通讯,都没有听说过。然后听同事说,是跨语言Socket通讯的开源组件。

 

功能及特点

 

1.跨平台和语言的Socket通讯组件。

 

2.根据伪代码的结构语言定义对象和服务结构,然后生成各语言的代码和接口

 

3.各语言根据组件提供的库,编写客户端和服务器端程序。服务器端实现接口并编写业务逻辑。

 

4.服务器端支持多种序列化方式(Binary,Compact,JSON等)和多种服务器实现

 

 

 

太晚了,以后在完善,先贴代码了

 

 

 

本测试使用WINDOW环境和JAVA语言

 

 

 

1.下载和安装

 

下载地址:http://thrift.apache.org

 

下载最新版本,当前0.7.0

 

 

 

 

 

解压 thrift-x.x.x.tar.gz ,进入thrift-x.x.x/lib/java,在cmd模式先使用ant编译(ant安装和设置就不说了哈。然后需要上公网,昨天在公司弄不起就是公司上不了公网,热)。

 

 

 

2.建立测试工程

 

普通JAVA工程,目录如下:

 

src

 

+ org.acooly.thrift.demo.client  客户端代码

 

+ org.acooly.thrift.demo.generalcode 通过thrift工具生成的代码

 

+ org.acooly.thrift.demo.server 服务器端代码

 

lib

 

+拷贝前面ant编译后的build/lib下的jar和编译生成的thrift-x.x.x.jar

 

tools

 

+ thrift.exe 前面下载的

 

+ thriftdemo.thrift 伪代码

 

 

 

3.编写伪代码文件*.thrift

 

 

 

Java代码   收藏代码
  1. namespace java org.acooly.thrift.demo.generalcode  
  2.   
  3. struct Contact{  
  4.     1:i32 id  
  5.     2:string name  
  6.     3:i64 birthday  
  7.     4:string phoneNo  
  8.     5:string ipAddress  
  9.     6:map<string,string> props  
  10. }  
  11.   
  12. service ContactManager{  
  13.   void save(1:Contact contact)  
  14.   void remove(1:i32 id)  
  15.   list<Contact> getAll();  
  16.   list<Contact> query(1:map<string,string> conditions)  
  17. }  

 

 

 

4.生成代码

 

 

 

cmd模式进入 tools目录,运行

 

thrift.exe -gen java thriftdemo.thrift

 

 

 

运行成功后,在本目录会生成gen-java目录,拷贝该目录下生成的代码到工程中对应的包。

 

 

 

5.服务器代码和实现业务逻辑

 

 

 

实现业务逻辑

 

Java代码   收藏代码
  1. package org.acooly.thrift.demo.server;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Calendar;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import org.acooly.thrift.demo.generalcode.Contact;  
  9. import org.acooly.thrift.demo.generalcode.ContactManager;  
  10. import org.apache.thrift.TException;  
  11.   
  12. public class ContactManagerImpl implements ContactManager.Iface{  
  13.   
  14.     public List<Contact> getAll() throws TException {  
  15.         List<Contact> contacts = new ArrayList<Contact>();  
  16.         contacts.add(new Contact(1,"zhangpu",Calendar.getInstance().getTimeInMillis(),"1389612222","192.168.2.1",null));  
  17.         return contacts;  
  18.     }  
  19.   
  20.     public List<Contact> query(Map<String, String> conditions) throws TException {  
  21.         List<Contact> contacts = new ArrayList<Contact>();  
  22.         contacts.add(new Contact(1,"zhangpu",Calendar.getInstance().getTimeInMillis(),"1389612222","192.168.2.1",null));  
  23.         return contacts;  
  24.     }  
  25.   
  26.     public void remove(int id) throws TException {  
  27.         System.out.println("invoke: remove,id = " + id);  
  28.     }  
  29.   
  30.     public void save(Contact contact) throws TException {  
  31.         System.out.println("invoke: save,contact = " + contact);  
  32.           
  33.     }  
  34.   
  35.       
  36.       
  37. }  

 

 编写服务器代码

 

Java代码   收藏代码
  1. package org.acooly.thrift.demo.server;  
  2.   
  3. import org.acooly.thrift.demo.generalcode.ContactManager;  
  4. import org.acooly.thrift.demo.generalcode.ContactManager.Iface;  
  5. import org.apache.thrift.protocol.TCompactProtocol;  
  6. import org.apache.thrift.protocol.TCompactProtocol.Factory;  
  7. import org.apache.thrift.server.TServer;  
  8. import org.apache.thrift.server.TSimpleServer;  
  9. import org.apache.thrift.server.TServer.Args;  
  10. import org.apache.thrift.transport.TServerSocket;  
  11.   
  12. public class ThriftServer {  
  13.   
  14.     public static void main(String[] args) throws Exception{  
  15.         TServerSocket serverSocket = new TServerSocket(8111);  
  16.         ContactManager.Processor<Iface> processor = new ContactManager.Processor<Iface>(new ContactManagerImpl());  
  17.         Factory factory = new TCompactProtocol.Factory();  
  18.         Args ag = new Args(serverSocket);  
  19.         ag.outputProtocolFactory(factory);  
  20.         ag.inputProtocolFactory(factory);  
  21.         ag.processor(processor);  
  22.         TServer server = new TSimpleServer(ag);  
  23.         server.serve();  
  24.     }  
  25.       
  26. }  

 

 

 

6.客户端代码

 

Java代码   收藏代码
  1. package org.acooly.thrift.demo.client;  
  2.   
  3. import java.util.Calendar;  
  4. import java.util.List;  
  5.   
  6. import org.acooly.thrift.demo.generalcode.Contact;  
  7. import org.acooly.thrift.demo.generalcode.ContactManager;  
  8. import org.apache.thrift.protocol.TCompactProtocol;  
  9. import org.apache.thrift.protocol.TProtocol;  
  10. import org.apache.thrift.transport.TSocket;  
  11. import org.apache.thrift.transport.TTransport;  
  12.   
  13.   
  14. public class ThriftClient {  
  15.   
  16.     public static void main(String[] args) throws Exception{  
  17.           
  18.         TTransport transport = new TSocket("localhost",8111);  
  19.         TProtocol protocol = new TCompactProtocol(transport);  
  20.         ContactManager.Client client = new ContactManager.Client(protocol);  
  21.         transport.open();  
  22.           
  23.         List<Contact> list = client.getAll();  
  24.         System.out.println(list);  
  25.           
  26.         client.save(new Contact(1,"zhangpu",Calendar.getInstance().getTimeInMillis(),"1389612222","192.168.2.1",null));  
  27.           
  28.         client.remove(1);  
  29.         transport.close();  
  30.     }  
  31. }  

 

 

 

7.启动和测试运行

 

1.运行ThriftServer

 

2.运行ThriftClient

 

 

 

ThriftServer输出:

 

invoke: save,contact = Contact(id:1, name:zhangpu, birthday:1308591769148, phoneNo:1389612222, ipAddress:192.168.2.1, props:null)
invoke: remove,id = 1

 

 

 

ThriftClient输出:

 

[Contact(id:1, name:zhangpu, birthday:1308591769131, phoneNo:1389612222, ipAddress:192.168.2.1, props:null)]

 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [thrift] 推荐:

【Thrift二】Thrift版的Hello World

- - 开源软件 - ITeye博客
本篇,不考虑细节问题和为什么,先照葫芦画瓢写一个Thrift版本的Hello World,了解Thrift RPC服务开发的基本流程. 在Intellij中创建一个Maven模块,加入对Thrift的依赖,同时还要加上slf4j依赖,如果不加slf4j依赖,在后面启动Thrift Server时会报错.

【Thrift一】Thrift编译安装

- - 开源软件 - ITeye博客
上面这段话选自Apache对Thrift的一句话介绍,Thrift是一个高性能的RPC服务框架. 在技术选型时,有如下三方面的需求时,考虑使用Thrift. 2.请求和响应的数据传输量大. 个人认为在没有特别strong的理由情况下,慎用Thrift. HTTP请求通常都能够满足需求,使用Thrift带来很多开发上的额外的工作量,一个简单的服务,就要写客户端代码,.thrift接口定义以及服务器端的服务响应代码,简单的事情复杂化.

Thrift入门试用

- - Java - 编程语言 - ITeye博客
在新的项目中公司在平台内部系统间使用Thrift通讯,都没有听说过. 然后听同事说,是跨语言Socket通讯的开源组件. 1.跨平台和语言的Socket通讯组件. 2.根据伪代码的结构语言定义对象和服务结构,然后生成各语言的代码和接口. 3.各语言根据组件提供的库,编写客户端和服务器端程序. 服务器端实现接口并编写业务逻辑.

thrift快速入门实例

- - 五四陈科学院-坚信科学,分享技术
以下内容由 [五四陈科学院]提供. Thrift是Facebook的核心框架之一,使不同的开发语言开发的系统可以通过该框架实现彼此的通信,类似于webservice,但是Thrift提供了近乎变态的效率和开发的方便性,是webservice所不能比拟的.  * @author 54chen(陈臻) [[email protected] [email protected]] .

Thrift原理简析(JAVA)

- - ITeye博客
    本文以UserService为例,描述一下使用thrift的方式,以及其原理...     首先下载和安装thrift客户端,比如在windows平台下,下载thrift.exe,不过此处需要提醒,不同的thrift客户端版本生成的API可能不兼容.本例使用thrift-0.9.0.exe;通过"--gen"指定生成API所适配的语言.本实例为生成java客户端API..

Apache Thrift - java开发详解

- - 编程语言 - ITeye博客
2、编写IDL文件 Hello.thrift. 4、编写实现类、实现Hello.Iface:. 5、编写服务端,发布(阻塞式IO + 多线程处理)服务.      * 阻塞式、多线程处理 .             //设置传输通道,普通通道  .             //使用高密度二进制协议  .

Apache Thrift入门1-架构&介绍

- 彦强 - J2EE企业应用 顾问/咨询- H.E.&#39;s Blog
  Thrift源于大名鼎鼎的facebook之手,在2007年facebook提交Apache基金会将Thrift作为一个开源项目,对于当时的facebook来说创造thrift是为了解决facebook系统中各系统间大数据量的传 输通信以及系统之间语言环境不同需要跨平台的特性. 所以thrift可以支持多种程序语言,例如:  C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk.

thrift最佳实践:版本与兼容

- 铭文 - 五四陈科学院-坚信科学,分享技术
以下内容由[五四陈科学院]提供. 在许多系统里面,被称做message.. 协议随着岁月而演变,如果一个已经存在的消息类型不再满足需求,但是你仍然想使用原来使用thrift文件生成的代码,比如你想在现在的消息类型上增加一个额外的字段. 不用担心人,不搞坏原来的任何代码而更新消息类型,是非常简单的,只需要时刻记录以下的规则:.

浅谈Thrift内部实现原理

- - 董的博客
Dong | 新浪微博: 西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明. 网址: http://dongxicheng.org/search-engine/thrift-internals/. Thrift由两部分组成:编译器(在compiler目录下,采用C++编写)和服务器(在lib目录下),其中编译器的作用是将用户定义的thrift文件编译生成对应语言的代码,而服务器是事先已经实现好的、可供用户直接使用的RPC Server(当然,用户也很容易编写自己的server).

Thrift 原理与使用实例

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