使用Java快速入门的Apache Thrift

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows/Linux安装python2.7,pycharm和pandas——《利用Python进行数据分析》

一、Windows下&#xff08;两种方法&#xff09; 1. 安装Python EDP_free并安装pandas ① 如果你没有安装python2.7&#xff0c;可以直接选择安装Python EDP_free&#xff0c;然后再安装pandas等包就行 &#xff1a; Python EDP_free 网址&#xff1a; http://epdfree-7-3-2.…

Python基础类型

1. 列表、元组操作 列表是我们最以后最常用的数据类型之一&#xff0c;通过列表可以对数据实现最方便的存储、修改等操作 定义列表 names [Alex,"Tenglan",Eric] 通过下标访问列表中的元素&#xff0c;下标从0开始计数 >>> names[0] Alex >>> nam…

angular点击按钮弹出页面_Win10提示“由于启动计算机时出现了页面文件配置问题”解决方法...

我们在使用Windows10系统的过程中&#xff0c;经常会遇到一些问题。近期有一个网友咨询装机之家小编&#xff0c;称自己Windows10系统开机之后&#xff0c;弹出系统属性对话框&#xff0c;提示“由于启动计算机时出现了页面文件配置问题”的问题&#xff0c;我们要如何解决呢&a…

计算机程序编程就业,计算机编程就业

为毕业生写计算机编程就业提供计算机编程就业范文参考,涵盖硕士、大学本科毕业论文范文和职称论文范文&#xff0c;包括论文选题、开题报告、文献综述、任务书、参考文献等&#xff0c;是优秀免费计算机编程就业网站。基于编程语言类课程教学方法的探讨位把考查学生的编程能力也…

Spring集成–第1节– Hello World

Spring Integration的“ Hello World ” –考虑一个简单的程序&#xff0c;以使用Spring Integration将“ Hello World”打印到控制台&#xff0c;并在此过程中访问一些企业集成模式概念 在进入程序本身之前&#xff0c;快速回顾一下消息传递概念将很有用–消息传递是一种集成样…

正则表达式贪婪模式与懒惰模式

正则表达式贪婪匹配模式&#xff0c;对于初学者&#xff0c;往往也很容易出错。有时候需要匹配一个段代码内容&#xff0c;发现匹配与想要不一致。发现原来&#xff0c;跟贪婪模式有关系。如下&#xff0c;我们看下例子&#xff1a; 什么是贪婪模式 字符串有: “<h3>abd&…

stm32 薄膜键盘原理_市面上的笔记本键盘优缺点解析,看完秒懂

大家在选购电脑时&#xff0c;很多人的关注重点都是笔记本的配置好不好、外观设计酷不酷和电池续航能力强不强&#xff0c;对电脑键盘往往不会太在意&#xff0c;其实一个好的电脑键盘也可以帮助你提高工作效率&#xff0c;特别对于小编这样的文字工作者&#xff0c;如果键盘手…

计算机等级考试心得体会,计算机等级考试心得体会(2)

估计以后的考试也可能略有变化&#xff0c;即逐渐增加使用命令的条数。由于该内容变化小&#xff0c;考生应当练习到纯熟的境地&#xff0c;在考试时用尽可能少的时间来做这部分内容&#xff0c;以使其他内容有更多的时间。六题能做出五题即可&#xff0c;有一题一时想不起&…

Web开发框架–第1部分:选项和标准

在我的公司&#xff0c;我们正在评估未来几年将使用哪种Web开发框架。 自上次评估以来&#xff0c;我们一直在使用由Struts 2驱动的Java应用服务器作为MVC&#xff0c;将Tiles作为模板引擎&#xff0c;将jQuery用于Javascript awesomennes&#xff0c;将DWR用于AJAX调用&#x…

增加一个类的功能可以采用继承或者代理模式或者装饰者模式

增加一个类的功能有3种办法&#xff1a; 1.继承 2.代理模式 3.装饰者模式转载于:https://www.cnblogs.com/panxuejun/p/6127837.html

dell增强保护套装还原失效_汕头长安欧尚汽车音响改装升级,还原真实音色

今天给大家分享的是汕头车韵汽车音响改装店开业以来&#xff0c;升级改装的第113辆长安汽车。长安欧尚x7外观设计十分出彩&#xff0c;整体造型动感十足&#xff0c;前脸采用六边形大尺寸的前格栅&#xff0c;并加入了“云鹰之翼”的设计元素&#xff0c;造型十分具有攻击性&am…

POJ 2386 Lake Counting

链接&#xff1a;http://poj.org/problem?id2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 24263 Accepted: 12246Description Due to recent rains, water has pooled in various places in Farmer Johns field, which is represented by a…

计算机窗口颜色不能自定义,用RBG颜色设置自定义颜色

这个是Mac自带的测色计快捷键shift command c即可复制RBG格式的颜色#DD0000 这个是csdn 的logo里的红色我们得到的是十六位颜色代码但是UIColor()只有这几种初始化方式init(white: CGFloat, alpha: CGFloat)init(hue: CGFloat, saturation: CGFloat, brightness: CGFloat, al…

http协议和浏览器缓存问题

HTTP是超文本传输协议。 HTTP是一个应用层协议&#xff0c;由请求和响应构成&#xff0c;是一个标准的客户端服务器模型。HTTP是一个无状态的协议。 转载于:https://www.cnblogs.com/hodgson/p/6128003.html

Spring3国际化和本地化

我最近想将Spring 3提供的国际化和本地化功能添加到我当前的项目之一中。 我浏览了Spring文档&#xff0c;然后在Internet上搜索以找到一些资源。 但是我找不到能够满足客户要求的资源。 大多数教程都像hello world应用程序&#xff0c;它提供了基本的理解。 即使是spring文档&…

h3c交换机 查看二层交换机端口ip_【分享】项目中如何选到称心如意的交换机?...

项目中如何选择交换机&#xff1f;这七个步骤不能少如何选择交换机&#xff1f;如何根据项目确定网络结构&#xff1f;我们在做大部分项目都有这样的疑问&#xff0c;交换机做为弱电中最常用的设备之一&#xff0c;关于他的使用与选择&#xff0c;不得不知&#xff0c;本期我们…

SSH中一些典型的问题

struts2 1-1&#xff1a;为什么每次请求都要创建一个Action对象&#xff1f; 是出于对线程安全的考虑&#xff0c;每个request都不会相互影响 1-2&#xff1a;ModelDriven拦截器的配置中refreshModelBeforeResult解决了什么问题&#xff1f; 先把旧的model对象从ValueStack…

为什么计算机连接不上打印机,为什么电脑连接打印机后却没反应

2013-12-12我的笔记本怎么连接不了打印机 显示是这样的好&#xff1a;以下方法供您参考&#xff1a;看一下您的系统服务中这两个(最上面 和最下面的是不是没启用)总之是您的局域网连接没有连接上&#xff0c;要不在网上邻居里您会看到其他的机器的&#xff0c;这是搜到的解决的…

JavaFX 2.0布局窗格– BorderPane

BorderPane非常适合开发更复杂的布局。 通常&#xff0c; BorderPane提供五个不同的区域&#xff1a;顶部&#xff0c;右侧&#xff0c;底部&#xff0c;左侧和中央。 您可以通过调用setTop/setBottom/set…方法将Node设置到每个区域。 这种方法使开发“类似于网站”的应用程序…

页面排版简单样式

页面排版简单样式demo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml" xml:lang"zh-cn"> &l…