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 ...
随机推荐
- 关于python中的查询数据库内容中用到的fetchone()函数和fetchall()函数(转)还有fetchmany()
最近在用python操作mysql数据库时,碰到了下面这两个函数,标记一下: fetchone() : 返回单个的元组,也就是一条记录(row),如果没有结果 则返回 None fetchall() ...
- ZooKeeper的使用:安装、常用的命令
公司项目需要使用dubbo,因此,自己做个小Demo就很有必要了,也有助于自己理解和使用,前期准备工作当然就必不可少了,因为dubbo是发布到zookeeper的服务,故先把zookeeper的环境先 ...
- ES6 Promise 让异步函数顺序执行
应用 ES6 的 内置对象 Promise, 让异步函数 按顺序执行的例子 如下: 上边 是四个用Promise 处理过的 异步执行的函数: fn1.fn2.fn3.fn4 下面,让其按顺序执行 如下 ...
- JavaScript与Java数据类型的区别
今天开始正式认真学习js,虽然在平常j2ee开发中也经常用到JS但并不精通,这次随笔记下js与Java数据类型的不同之处 Number 与java不同,js作为弱类型语言即使在浮点数与整数上也未作明确 ...
- HCNP学习笔记之ICMP协议与ping原理以及用Python实现ping
一.ICMP协议分析 ICMP:Internet控制报文协议.由于IP协议并不是一个可靠的协议,它不保证数据被成功送达,那么,如何才能保证数据的可靠送达呢? 这里就需要使用到一个重要的协议模块ICMP ...
- MySQL-5.7 游标及DECLARE
1.cursor游标 用来声明一个数据集 游标的声明必须在变量和条件声明之后,在handler声明之前 游标特性: 不灵敏:服务器可以或不复制其结果 只读:不可更新 不可滚动的:只能在一个方向上遍历, ...
- PHP-FPM 设置多pool、配置文件重写
重写配置文件 1.清空php配置文件 命令:> /usr/local/php/etc/php-fpm.conf 2.重新写入php-fpm配置 命令:vim /usr/local/php/etc ...
- .NET Framework(CLI,CLS,CTS,CLR,FCL,BCL)
最下层蓝色部分是.NET Framework的基础,也是所有应用软件的基础..NET Framework不是凭空出来的,实际上API,COM+,和一些相关驱动依然是它的基石..NET Framewor ...
- windows 环境下安装python MySQLdb
使用Python访问MySQL,需要一系列安装 Linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 http://blog.csdn.NET/wklken/arti ...
- 《Computational Statistics with Matlab》硬译
第1章 从随机变量采样 研究者提出的概率模型对于分析方法来说通常比较复杂,研究者处理复杂概率模型时越来越依赖计算.数值方法,通过使用计算方法,研究者就不用对一些分析技术做一些不现实的假设(如正态性和独 ...