Thrift之java实例
一、java实例
1.下载与安装thrift工具
http://thrift.apache.org/download/
服务Test实现类
package com.zychen.thrift; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.thrift.TException; public class TestImpl implements Test.Iface { public void Init(){ int n = 0; for(n=0; n<10; n++){ User user = new User(); user.setId(n+1); user.setName(String.format("name_%d", n+1)); user.setAge(18+n+1); user.setVip(true); listUser.add(user); } } @Override public int add(int a, int b) throws TException { return a+b; } @Override public User getById(long id) throws TException { User userObj = null; Iterator<User> iter = listUser.iterator(); while(iter.hasNext()){ userObj = iter.next(); if(userObj.getId() == id){ return userObj; } } return null; } //插入用户信息 void InsertUser(User user){ listUser.add(user); } protected List<User> listUser = new ArrayList<User>(); }
//服务端代码
package com.zychen.test; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TBinaryProtocol.Factory; import org.apache.thrift.protocol.TCompactProtocol; import org.apache.thrift.server.TNonblockingServer; import org.apache.thrift.server.TServer; import org.apache.thrift.server.TThreadPoolServer; import org.apache.thrift.server.TThreadPoolServer.Args; import org.apache.thrift.transport.TFramedTransport; import org.apache.thrift.transport.TNonblockingServerSocket; import org.apache.thrift.transport.TServerSocket; import org.apache.thrift.transport.TTransportException; import com.zychen.thrift.Test; import com.zychen.thrift.Test.Processor; import com.zychen.thrift.TestImpl; public class Server { //阻塞式IO public void startOIOServer() { try { TServerSocket serverTransport = new TServerSocket(1234); TestImpl testImpl = new TestImpl(); testImpl.Init(); Test.Processor process = new Processor(testImpl); Factory portFactory = new TBinaryProtocol.Factory(true, true); Args args = new Args(serverTransport); args.processor(process); args.protocolFactory(portFactory); TServer server = new TThreadPoolServer(args); System.out.println("init..."); server.serve(); } catch (TTransportException e) { e.printStackTrace(); } } //使用非阻塞式IO,服务端和客户端需要指定TFramedTransport数据传输的方式。 public void startNIOServer() { try { TestImpl testImpl = new TestImpl(); testImpl.Init(); Test.Processor tprocessor = new Processor(testImpl); TNonblockingServerSocket tnbServerTransport = new TNonblockingServerSocket(1234); TNonblockingServer.Args tArgs = new TNonblockingServer.Args(tnbServerTransport); tArgs.processor(tprocessor); tArgs.transportFactory(new TFramedTransport.Factory()); tArgs.protocolFactory(new TCompactProtocol.Factory()); TServer server = new TNonblockingServer(tArgs); System.out.println("init..."); server.serve(); }catch(TTransportException e) { e.printStackTrace(); } } /** * @param args */ public static void main(String[] args) { Server server = new Server(); //server.startOIOServer(); server.startNIOServer(); } }
依赖jar包
5、客户端代码
package com.zychen.test; import org.apache.thrift.TApplicationException; import org.apache.thrift.TException; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.protocol.TCompactProtocol; import org.apache.thrift.protocol.TProtocol; import org.apache.thrift.transport.TFramedTransport; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; import org.apache.thrift.transport.TTransportException; import com.zychen.thrift.Test; import com.zychen.thrift.User; public class Client { //阻塞io public void startOIOClient() { TTransport transport; try { transport = new TSocket("localhost", 1234); TProtocol protocol = new TBinaryProtocol(transport); Test.Client client = new Test.Client(protocol); transport.open(); int nResult = client.add(100, 200); String strTemp = String.format("client.add(100, 200) = %d", nResult); System.out.println(strTemp); User u1 = client.getById(1); if(u1 != null){ System.out.println(u1.getName()); } User u2 = client.getById(11); if(u2 == null){ System.out.println("null"); } u2 = client.getById(9); transport.close(); } catch (TTransportException e) { e.printStackTrace(); } catch (TException e) { if(e instanceof TApplicationException && ((TApplicationException) e).getType() == TApplicationException.MISSING_RESULT){ System.out.println("Theresult of Method function is NULL"); }else{ e.printStackTrace(); } } } //非阻塞io public void startNIOClient() { TTransport transport; try { transport = new TFramedTransport(new TSocket("localhost", 1234,30000)); TProtocol protocol = new TCompactProtocol(transport); Test.Client client = new Test.Client(protocol); transport.open(); int nResult = client.add(100, 200); String strTemp = String.format("client.add(100, 200) = %d", nResult); System.out.println(strTemp); User u1 = client.getById(1); if(u1 != null){ System.out.println(u1.getName()); } User u2 = client.getById(11); if(u2 == null){ System.out.println("null"); } u2 = client.getById(9); transport.close(); } catch (TTransportException e) { e.printStackTrace(); } catch (TException e) { if(e instanceof TApplicationException && ((TApplicationException) e).getType() == TApplicationException.MISSING_RESULT){ System.out.println("Theresult of Method function is NULL"); }else{ e.printStackTrace(); } } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Client client = new Client(); //client.startOIOClient(); client.startNIOClient(); } }
依赖jar包
二、Thrift-0.9.3 jar包编译生成。
1、myeclipse新建一个java工程。
2、打开thrift目录,查找到thrift-0.9.3\thrift-0.9.3\lib\java\src,将这个src目录下的代码拷贝到工程目录下。
3、引入httpClient、httpcore、javax.servlet、slf4j.api jar包。如图:
4、编译,导出thrift-0.9.3jar包,导出时选择Exportall output folders for checked projects,否则scheme类无法导出到jar包中。
Thrift之java实例的更多相关文章
- Thrift-java实例
➠更多技术干货请戳:听云博客 Thrift实例1 功能描述:客户端与服务器端分别是两个应用,先启动服务器端,再启动客户端,实现执行客户端运行服务器端的加法方法. 源码截图(源码在附件中): 客户端: ...
- Thrift入门及Java实例演示<转载备用>
Thrift入门及Java实例演示 作者: Michael 日期: 年 月 日 •概述 •下载配置 •基本概念 .数据类型 .服务端编码基本步骤 .客户端编码基本步骤 .数据传输协议 •实例演示(ja ...
- Apache Thrift学习之一(入门及Java实例演示)
目录: 概述 下载配置 基本概念 数据类型 服务端编码基本步骤 客户端编码基本步骤 数据传输协议 实例演示(java) thrift生成代码 实现接口Iface TSimpleServer服务模型 T ...
- Apache Thrift with Java Quickstart(thrift入门及Java实例)
thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl ...
- Protocol Buffer技术详解(Java实例)
Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...
- 吐槽net下没有靠谱的FastDFS的sdk之使用thrift实现JAVA和C#互通
事情是这样的,在一个新项目中引入了fastdfs,用这玩意做一些小数据的存储还是很方便的,然后在nuget上就找一个对接FastDFS的sdk,如下图: 一眼就看到了这个top1的sdk,应该会比较靠 ...
- JAVA实例
JAVA实例1 1 package Demo3; import java.io.File; import java.io.FileReader; import java.io.IOExceptio ...
- Java 实例 - 如何执行指定class文件目录(classpath) Java 实例 J
Java 实例 - 如何执行指定class文件目录(classpath) Java 实例 如果我们 Java 编译后的class文件不在当前目录,我们可以使用 -classpath 来指定class ...
- Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs
ylbtech-Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs 1.返回顶部 1. Java 实例 - 重载(ove ...
随机推荐
- 在 ReportViewer 报表中使用表达式
from:http://www.cnblogs.com/jobin/articles/1152213.html 有些表达式在报表中很常用.其中包括更改报表中的数据外观的表达式.计算总数的表达式和更改报 ...
- jquery 获取checkbox 选中值并拼接字符集
1.代码示例: var chk_value =[]; $('input[name="rewardids"]:checked').each(function(){ chk_val ...
- LeetCode:前K个高频单词【692】
LeetCode:前K个高频单词[692] 题目描述 给一非空的单词列表,返回前 k 个出现次数最多的单词. 返回的答案应该按单词出现频率由高到低排序.如果不同的单词有相同出现频率,按字母顺序排序. ...
- JavaScript:隐藏Url中的参数
<script type="text/javascript"> function submitForm(url, data) { var eleForm = docum ...
- HZNUOJ 2508:双峰插云
我们注意到总的颜色种类只有200,故我们可以先处理出所有云朵中每一种颜色有多少朵云朵拥有,此处我们约定用$cnt[] 表示$ 然后暴力枚举将哪朵云分给老薛,记录三个临时变量$Max_{kk}, Max ...
- HackerRank - common-child【DP】
HackerRank - common-child[DP] 题意 给出两串长度相等的字符串,找出他们的最长公共子序列e 思路 字符串版的LCS AC代码 #include <iostream&g ...
- 基于jQuery和Bootstrap的手风琴垂直菜单
在线演示 本地下载
- jQuery单选框跟复选框美化
在线演示 本地下载
- 函数:生成n个互不相同的随机数,最大值为upper
参考:http://blog.csdn.net/zhangkaihang/article/details/6836506 函数getRandArray()功能说明: 入参:int upper-生成的随 ...
- 2062326 齐力锋 实验三《敏捷开发与XP实践》实验报告
北京电子科技学院(BESTI) 实 验 报 告 课程: 程序设计与数据结构 班级: 1623 姓名: 齐力锋 学号: 20162326 成绩: 指导教师: 娄嘉鹏/王志强 实验日期: 2017年5月1 ...