更多技术干货请戳:听云博客

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官网下载

http://thrift.apache.org/

下载: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实例的更多相关文章

  1. Thrift入门及Java实例演示<转载备用>

    Thrift入门及Java实例演示 作者: Michael 日期: 年 月 日 •概述 •下载配置 •基本概念 .数据类型 .服务端编码基本步骤 .客户端编码基本步骤 .数据传输协议 •实例演示(ja ...

  2. Thrift之java实例

    一.java实例 1.下载与安装thrift工具 http://thrift.apache.org/download/ .服务器代码 服务Test实现类 package com.zychen.thri ...

  3. Apache Thrift with Java Quickstart(thrift入门及Java实例)

    thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl ...

  4. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  5. JAVA实例

     JAVA实例1  1 package Demo3; import java.io.File; import java.io.FileReader; import java.io.IOExceptio ...

  6. Java 实例 - 如何执行指定class文件目录(classpath) Java 实例 J

    Java 实例 - 如何执行指定class文件目录(classpath)  Java 实例 如果我们 Java 编译后的class文件不在当前目录,我们可以使用 -classpath 来指定class ...

  7. Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs

    ylbtech-Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs 1.返回顶部 1. Java 实例 - 重载(ove ...

  8. Java-Runoob-高级教程-实例-方法:14. Java 实例 – Varargs 可变参数使用

    ylbtech-Java-Runoob-高级教程-实例-方法:14. Java 实例 – Varargs 可变参数使用 1.返回顶部 1. Java 实例 - Varargs 可变参数使用  Java ...

  9. Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用

    ylbtech-Java-Runoob-高级教程-实例-方法:13. Java 实例 – for 和 foreach循环使用 1.返回顶部 1. Java 实例 - for 和 foreach循环使用 ...

  10. Java-Runoob-高级教程-实例-方法:12. Java 实例 – Enum(枚举)构造函数及方法的使用-um

    ylbtech-Java-Runoob-高级教程-实例-方法:12. Java 实例 – Enum(枚举)构造函数及方法的使用 1.返回顶部 1. Java 实例 - Enum(枚举)构造函数及方法的 ...

随机推荐

  1. Android音频开发之AudioTrack实时播放

    前言: 其实在Android中录音可以用MediaRecord录音,操作比较简单.但是不能对音频进行处理.考虑到项目中做的是实时语音只能选择AudioRecord进行录音.然后实时播放也只能采用Aud ...

  2. ASP.NET MVC之文件上传【二】(九)

    前言 上一节我们讲了简单的上传以及需要注意的地方,查相关资料时,感觉上传里面涉及到的内容还是比较多,于是就将上传这一块分为几节来处理,同时后续也会讲到关于做上传时遗漏的C#应该注意的地方,及时进行查漏 ...

  3. JavaScript操作Cookie

    在Web开发中,我们经常使用Cookie保存一些不是非常敏高的数据.比如“下次自动登录”,“广告显示”等功能.定义是:某些网站为了辨别用户身份而存储在用户本地终端(主要是浏览器)上的数据.定义域RFC ...

  4. c# 我所理解的 值类型 and 引用类型

    一直以来对于值类型和引用类型都只是一个模糊的概念,趁最近有空深入理解了下. 先说说值类型,在msdn上是这样介绍值类型的. 意思就是值类型直接包含值. 变量引用的位置就是值所在内存中实际存储的位置,所 ...

  5. sysv-rc-conf管理Ubuntu server开机启动服务

    在RedHat中,都是使用chkconfig来管理服务的,但是在Ubuntu Server中,却有一个更好的工具,chkconfig也是可以使用的.今天来说一下sysv-rc-conf sysv-rc ...

  6. MongoDB - basic

    mongoDB basic from:http://www.tutorialspoint.com/mongodb prject:https://github.com/chenxing12/l4mong ...

  7. Cache-Aside Pattern(缓存模式)

    Load data on demand into a cache from a data store. This pattern can improve performance and also he ...

  8. 创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段

    创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段 添加查询功能 本文将实现通过Name查询用户信息. 首先更新GetAll方法以启用查询: public async ...

  9. 分享一个UI与业务逻辑分层的框架(二)

    序言 第一篇讲解了UI与业务逻辑分层的框架(UIMediator)的使用.本篇将说明该框架的原理及代码实现. 整体结构 UI与后台类绑定主要分为UI输入->后台属性,后台属性-UI更新两部分,为 ...

  10. js的stopPropagation()、cancelBubble、preventDefault()、return false的分析

    个人笔记,如有错误,望指出. 事件冒泡,举个列子: <li> <a href='http://www.baidu.com'>点击a</a> </li> ...