Apache Thrift是由facebook创建的RPC框架,现在它是一个Apache项目。 Thrift可让您在不依赖语言的定义文件中定义数据类型和服务接口。 该定义文件用作编译器的输入,以生成用于构建通过不同编程语言进行通信的RPC客户端和服务器的代码。 您也可以参考Thrift白皮书 。

根据官方网站 Apache Thrift的说法,该软件框架用于可扩展的跨语言服务开发,它结合了软件堆栈和代码生成引擎,以构建可在C ++,Java,Python,PHP,Ruby, Erlang,Perl,Haskell,C#,Cocoa,JavaScript,Node.js,Smalltalk,OCaml和Delphi等语言。 图片由维基百科提供

在Windows中安装Apache Thrift

安装节俭可能是一个令人厌烦的过程。 但是对于Windows,编译器可以作为预构建的exe使用。 下载thrift.exe并将其添加到您的环境变量中。

编写Thrift定义文件(.thrift文件)

一旦习惯了,编写Thrift定义文件就变得非常容易。 我发现本教程非常有用。

定义文件示例(add.thrift)

namespace java com.eviac.blog.samples.thrift.server  // defines the namespace typedef i32 int  //typedefs to get convenient names for your typesservice AdditionService {  // defines the service to add two numbersint add(1:int n1, 2:int n2), //defines a method
}

编译Thrift定义文件

要编译.thrift文件,请使用以下命令。

thrift --gen <language> <Thrift filename>

在我的示例中,命令是

thrift --gen java add.thrift

执行完该命令后,您将在gen-java目录中找到对构建RPC客户端和服务器有用的源代码。 在我的示例中,它将创建一个名为AdditionService.java的Java代码。

编写服务处理程序

服务处理程序类是实现AdditionService.Iface接口所必需的。

示例服务处理程序(AdditionServiceHandler.java)

package com.eviac.blog.samples.thrift.server;import org.apache.thrift.TException;public class AdditionServiceHandler implements AdditionService.Iface {@Overridepublic int add(int n1, int n2) throws TException {return n1 + n2;}}

编写一个简单的服务器

以下是启动简单的节俭服务器的示例代码。 要启用多线程服务器,请取消注释示例代码的注释部分。

示例服务器(MyServer.java)

package com.eviac.blog.samples.thrift.server;import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TServer.Args;
import org.apache.thrift.server.TSimpleServer;public class MyServer {public static void StartsimpleServer(AdditionService.Processor<AdditionServiceHandler> processor) {try {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));System.out.println("Starting the simple server...");server.serve();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {StartsimpleServer(new AdditionService.Processor<AdditionServiceHandler>(new AdditionServiceHandler()));}}

写客户

以下是使用AdditionService提供的服务的示例Java客户端代码。

客户端代码示例(AdditionClient.java)

package com.eviac.blog.samples.thrift.client;import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;public class AdditionClient {public static void main(String[] args) {try {TTransport transport;transport = new TSocket("localhost", 9090);transport.open();TProtocol protocol = new TBinaryProtocol(transport);AdditionService.Client client = new AdditionService.Client(protocol);System.out.println(client.add(100, 200));transport.close();} catch (TTransportException e) {e.printStackTrace();} catch (TException x) {x.printStackTrace();}}}

运行服务器代码(MyServer.java)。 它应该输出以下内容,并将监听请求。

Starting the simple server...

然后运行客户端代码(AdditionClient.java)。 它应该输出以下内容。

300

参考: EVIAC博客上的JCG合作伙伴 Pavithra Siriwardena的Apache Thrift with Java快速入门 。

翻译自: https://www.javacodegeeks.com/2012/07/apache-thrift-with-java-quickstart.html

使用Java快速入门的Apache Thrift相关推荐

  1. apache thrift_使用Java快速入门的Apache Thrift

    apache thrift Apache Thrift是由facebook创建的RPC框架,现在它是一个Apache项目. Thrift允许您在不依赖语言的定义文件中定义数据类型和服务接口. 该定义文 ...

  2. Java快速入门-01-基础篇

    Java快速入门-01-基础篇 如果基础不好或者想学的很细,请参看:菜鸟教程-JAVA 本笔记适合快速学习,文章后面也会包含一些常见面试问题,记住快捷键操作,一些内容我就不转载了,直接附上链接,嘻嘻 ...

  3. ACM中java快速入门

    2019独角兽企业重金招聘Python工程师标准>>> ACM中java快速入门 附: Chapter I. Java的优缺点各种书上都有,这里只说说用Java做ACM-ICPC的特 ...

  4. Java快速入门学习笔记9 | Java语言中的方法

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  5. Java快速入门学习笔记8 | Java语言中的数组

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  6. Java快速入门学习笔记7 | Java语言中的类与对象

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  7. Java快速入门学习笔记6 | Java语言中的for循环语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  8. Java快速入门学习笔记5 | Java语言中的while循环语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  9. Java快速入门学习笔记4 | Java语言中的if条件语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

最新文章

  1. Bitcoin.com| 比特币现金2019·年度回顾
  2. python语言的理解-初学Python语言者必须理解的下划线
  3. xgboost与gbdt的区别
  4. okcoinapi开发代码_比特币程序化交易入门(5):WebSocket API
  5. spark 数据框 删除列_pandas 常用的数据处理函数
  6. oracle11g 导出表报EXP-00011:table不存在。
  7. js实现放大镜的效果
  8. opencv保存图像自动命名
  9. 威廉·布莱克《从一颗沙子看世界》(To see a world in a grain of sand)
  10. android 浏览器抓包工具下载,WebSee app下载-WebSee抓包工具v1.2.1 安卓版-腾牛安卓网...
  11. 五线谱音名和组别对照表_五线谱最全知识及符号! 太实用了,100%收藏!!!...
  12. zblog采集全套zblog采集方法
  13. (五)结合大彩屏介绍Bus Hound:cmd.Phase.ofs(rep)
  14. vue 微信录音倒计时_vue的微信语音功能,录音+对接口返回amr音频播放-Go语言中文社区...
  15. 应用程序错误电脑黑屏_Win10电脑老是遇到黑屏问题,学会这几招,彻底解决系统故障-win10开机黑屏...
  16. 13个offer,8家SSP,谈谈秋招经验
  17. Revit建模快速剖面操作一键完成!
  18. 3GPP TS 23501-g51 中英文对照 | 4.3.5 Service Exposure in Interworking Scenarios
  19. mac版python3.7安装教程_M是什么意思_M的翻译_音标_读音_用法_例句_爱词霸在线词典...
  20. python回调函数实例详解_python 简单的例子下详解回调函数

热门文章

  1. 转:聊聊开发中幂等性问题(*)
  2. 优先队列——斐波那契堆(without source code)
  3. happen-before原则的理解
  4. java 读取 文本块_Java文本块
  5. web前端面试问答_Web服务面试问答
  6. 使用Spring Boot和MongoDB构建一个React式应用程序
  7. dynamodb容器使用_使用DynamoDBMapper插入DynamoDB项目
  8. eclipse neon_在自定义Java 9映像上运行Eclipse Neon
  9. java实现ldap服务器_Java到LDAP教程(包括如何安装LDAP服务器/客户端)
  10. 我们相信加密! 教程