Thrift入门试用_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Thrift入门试用

Thrift入门试用

 2014/7/30 21:20:52  myhadoop  程序员俱乐部  我要评论(0)
  • 摘要:在新的项目中公司在平台内部系统间使用Thrift通讯,都没有听说过。然后听同事说,是跨语言Socket通讯的开源组件。功能及特点1.跨平台和语言的Socket通讯组件。2.根据伪代码的结构语言定义对象和服务结构,然后生成各语言的代码和接口3.各语言根据组件提供的库,编写客户端和服务器端程序。服务器端实现接口并编写业务逻辑。4.服务器端支持多种序列化方式(Binary,Compact,JSON等)和多种服务器实现太晚了,以后在完善,先贴代码了本测试使用WINDOW环境和JAVA语言1
  • 标签:

?

在新的项目中公司在平台内部系统间使用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 - Latest successful build (make dist)

?

Thrift compiler for Windows (thrift.exe) - Latest successful build

?

?

?

解压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代码 ?收藏代码class="star">
  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)]

?

?

上一篇: Twitter电话会议:当前专注用户体验而非盈利 下一篇: 没有下一篇了!
  • 相关文章
发表评论
用户名: 匿名