Thrift-java实例
Thrift实例1
功能描述:客户端与服务器端分别是两个应用,先启动服务器端,再启动客户端,实现执行客户端运行服务器端的加法方法。
源码截图(源码在附件中):
客户端:
TestThriftClientServlet:

SendRequestController:

Pom.xml:

服务端:
TestThriftServlet:

ThriftServerController:

IThriftServer:由thrift工具编译生成

ThriftServerServiceImpl:

运行说明:先运行服务端TestThriftServlet,再运行客户端TestThriftClientServlet,观察控制台打印出81,即:77+5=81
Thrift实例2
1、业务逻辑描述:一个系统通过用户身份证号获取另一个系统里有关这个用户的积分。
2、首先编写脚本文件test.thrift:
命名空间:
namespace java com.test
namespace是关键字表示命名空间,也就是java的包,java表示脚本转换成java类
请求:identitycard是身份证号
struct UserRequest
{
1:string identitycard
}
返回:code是成功标识 0表示成功;integral是用户拥有的积分
Params是返回的参数集合这里只用一个字段积分(integral)做例子;
struct UserResponse
{
1:string code
2:map<string,string> params
}
服务:
service ThriftCase
{
UserResponse integralService(1: UserRequest request)
}
3、到thrift官网下载
下载:thrift-0.6.1.tar.gz和Thrift compiler for Windows (thrift-0.6.1.exe)
4、用eclips里面的ant工具把thrift-0.6.1编译出jar包
解压:thrift-0.6.1.tar.gz
把解压后的文件夹放到eclipse的某个工程下如图:

如上图thrift-0.6.1文件夹放在名字是thrift的java工程的src下,有红叉不必管他,然后进入到thrift-0.6.1/lib/java中,右键点击build.xml

如图点击Ant Build。在build.xml同路径下会产生一个build文件夹里面有生成的thrift-0.6.1.jar包。把这个包放到所做的工程的lib里就行了。
5、把thrift脚本编译成java类
把thrift-0.6.1.exe和test.thrift文件放在同一个目录下并把路径写进环境变量Path中,如:E:/soft/ccc/路径下放入上述两个文件并把路径写进环境变量Path中。
在运行中键入cmd打开dos界面,进到E:/soft/ccc/路径下,执行thrift-0.6.1.exe文件,命令如下:
E:\soft\ccc\>Thrift-0.6.1 –gen java text.thrift
在这个目录下会产生一个gen-java文件夹,文件夹中会产生相应的java类,
ThriftCase.java
UserRequest.java
UserResponse.java
将三个文件拷贝到thrift工程的src/com/test/ 路径下。
6、编写服务端代码
服务端代码包含两个类:一个是业务逻辑类,一个是socket服务类。
业务逻辑类要实现ThriftCase.Iface服务接口
package com.test;
import java.util.HashMap;
import java.util.Map;
public class ThriftCaseImpl implements ThriftCase.Iface{
public UserResponse integralService(UserRequest request) {
try{
UserResponse urp=new UserResponse();
if(request.identitycard.equals("32010619881231103X")){
urp.setCode("0");
Map params=new HashMap();
params.put("integral", "10");
urp.setParams(params);
}
System.out.print("接收参数是:identitycard="+request.identitycard);
return urp;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
}
Socket服务类
package com.test;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TBinaryProtocol.Factory;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.server.TThreadPoolServer.Args;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;
public class TestService {
private void start(){
try {
TServerSocket serverTransport = new TServerSocket(8899);
ThriftCase.Processor processor = new ThriftCase.Processor(new ThriftCaseImpl());
//TBinaryProtocol – 二进制编码格式进行数据传输。
Factory protFactory = new TBinaryProtocol.Factory(true,true);
//TCompactProtocol 这种协议非常有效的,使用Variable-Length Quantity (VLQ) 编码对数据进行压缩
//Factory protFactory = new TCompactProtocol.Factory();
Args args = new Args(serverTransport);
args.processor(processor);
args.protocolFactory(protFactory);
TServer server = new TThreadPoolServer(args);
System.out.println("Starting server on port 8899 ...");
server.serve();
} catch (TTransportException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestService srv = new TestService();
srv.start();
}
}
7、客户端代码
package com.test;
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;
import com.test.ThriftCase.Client;
public class TestClient {
private void start() {
TTransport transport;
try {
transport = new TSocket("localhost", 8899);
TProtocol protocol = new TBinaryProtocol(transport);
Client client = new Client(protocol);
UserRequest request=new UserRequest();
request.setIdentitycard("32010619881231103X");
transport.open();
com.test.UserResponse urp=client.integralService(request);
if(urp.code!=null&&!urp.code.equals("")){
System.out.println("返回代码:"+urp.code+"; 参数是:"+urp.params.get("integral"));
}
transport.close();
} catch (TTransportException e) {
e.printStackTrace();
} catch (TException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
TestClient c = new TestClient();
c.start();
}
}
8、先开启服务
public static void main(String[] args) {
// TODO Auto-generated method stub
TestService srv = new TestService();
srv.start();
}
控制台显示:
Starting server on port 8899 ...
9、再运行客户端
public static void main(String[] args) {
TestClient c = new TestClient();
c.start();
}
控制台显示:
返回代码:0; 参数是:10
10、所需第三方包
log4j-1.2.15,
slf4j-api-1.6.1.jar
slf4j-log4j12-1.5.8.jar
原文链接:http://blog.tingyun.com/web/article/detail/1082
Thrift-java实例的更多相关文章
- Thrift入门及Java实例演示<转载备用>
Thrift入门及Java实例演示 作者: Michael 日期: 年 月 日 •概述 •下载配置 •基本概念 .数据类型 .服务端编码基本步骤 .客户端编码基本步骤 .数据传输协议 •实例演示(ja ...
- Thrift之java实例
一.java实例 1.下载与安装thrift工具 http://thrift.apache.org/download/ .服务器代码 服务Test实现类 package com.zychen.thri ...
- 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开发的,而且我们研发 ...
- 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 ...
- Java-Runoob-高级教程-实例-方法:14. Java 实例 – Varargs 可变参数使用
ylbtech-Java-Runoob-高级教程-实例-方法:14. Java 实例 – Varargs 可变参数使用 1.返回顶部 1. Java 实例 - Varargs 可变参数使用 Java ...
- Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用
ylbtech-Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用 1.返回顶部 1. Java 实例 - for 和 foreach循环使用 ...
- Java-Runoob-高级教程-实例-方法:12. Java 实例 – Enum(枚举)构造函数及方法的使用-um
ylbtech-Java-Runoob-高级教程-实例-方法:12. Java 实例 – Enum(枚举)构造函数及方法的使用 1.返回顶部 1. Java 实例 - Enum(枚举)构造函数及方法的 ...
随机推荐
- Android音频开发之AudioTrack实时播放
前言: 其实在Android中录音可以用MediaRecord录音,操作比较简单.但是不能对音频进行处理.考虑到项目中做的是实时语音只能选择AudioRecord进行录音.然后实时播放也只能采用Aud ...
- ASP.NET MVC之文件上传【二】(九)
前言 上一节我们讲了简单的上传以及需要注意的地方,查相关资料时,感觉上传里面涉及到的内容还是比较多,于是就将上传这一块分为几节来处理,同时后续也会讲到关于做上传时遗漏的C#应该注意的地方,及时进行查漏 ...
- JavaScript操作Cookie
在Web开发中,我们经常使用Cookie保存一些不是非常敏高的数据.比如“下次自动登录”,“广告显示”等功能.定义是:某些网站为了辨别用户身份而存储在用户本地终端(主要是浏览器)上的数据.定义域RFC ...
- c# 我所理解的 值类型 and 引用类型
一直以来对于值类型和引用类型都只是一个模糊的概念,趁最近有空深入理解了下. 先说说值类型,在msdn上是这样介绍值类型的. 意思就是值类型直接包含值. 变量引用的位置就是值所在内存中实际存储的位置,所 ...
- sysv-rc-conf管理Ubuntu server开机启动服务
在RedHat中,都是使用chkconfig来管理服务的,但是在Ubuntu Server中,却有一个更好的工具,chkconfig也是可以使用的.今天来说一下sysv-rc-conf sysv-rc ...
- MongoDB - basic
mongoDB basic from:http://www.tutorialspoint.com/mongodb prject:https://github.com/chenxing12/l4mong ...
- Cache-Aside Pattern(缓存模式)
Load data on demand into a cache from a data store. This pattern can improve performance and also he ...
- 创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段
创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段 添加查询功能 本文将实现通过Name查询用户信息. 首先更新GetAll方法以启用查询: public async ...
- 分享一个UI与业务逻辑分层的框架(二)
序言 第一篇讲解了UI与业务逻辑分层的框架(UIMediator)的使用.本篇将说明该框架的原理及代码实现. 整体结构 UI与后台类绑定主要分为UI输入->后台属性,后台属性-UI更新两部分,为 ...
- js的stopPropagation()、cancelBubble、preventDefault()、return false的分析
个人笔记,如有错误,望指出. 事件冒泡,举个列子: <li> <a href='http://www.baidu.com'>点击a</a> </li> ...