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

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. Power BI官方视频(1) Power BI Desktop 7月份更新功能概述

    2016年7月,Power BI Desktop进行了一些功能更新,提高整体的用户体验.同时也有一些新的和令人兴奋的功能.看看大概介绍,更新功能要点: 本文原文地址:Power BI官方视频(1) P ...

  2. IOS开发之新浪围脖

    IOS开发和Web开发一样,网络请求方式包括Get和Post方式.Get和Post两者有和特点和区别,在本篇博客中不做过多的论述,本篇的重点在于如何GET数据和POST数据.下面还会提到如何在我们的项 ...

  3. codefordream 关于js中级训练

    中级训练接着就紧锣密鼓的开始了. 首先是关于变量,变量的作用是给一个数据值标注名称. 注:JavaScript中变量名,函数名,参数名的命名规范:至少由字母,下划线,美元符号,数字其中的一种组成,但不 ...

  4. 如何用Pivot实现行列转换

    在Oracle中,如果要实现行列转换,较为常见的是用DECODE和CASE语句.对于简单的行列转行,DECODE和CASE语句尚能应付.在逻辑比较复杂,分组聚合较多的场景中,DECODE和CASE语句 ...

  5. 如何使用免费PDF控件从PDF文档中提取文本和图片

             如何使用免费PDF控件从PDF文档中提取文本和图片 概要 现在手头的项目有一个需求是从PDF文档中提取文本和图片,我以前也使用过像iTextSharp, PDFBox 这些免费的PD ...

  6. slf4j log4j logback关系详解和相关用法

    slf4j log4j logback关系详解和相关用法 写java也有一段时间了,一直都有用slf4j log4j输出日志的习惯.但是始终都是抱着"拿来主义"的态度,复制粘贴下配 ...

  7. (十五)WebGIS中平移功能的设计和实现

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 这一章我们将详细讲解WebGIS工具栏中另一个基础工具——平 ...

  8. APP接口自动化测试JAVA+TestNG(一)之框架环境搭建

    前言 好久不曾写点啥,去年换到新公司组测试团队与培养建设花费大量时间与精力,终于架构成型与稳定有时间可以打打酱油了.很久没有总结点啥,提笔想写的内容太多,先放APP接口自动化的内容吧,这个估计大家比较 ...

  9. 如何设置 Panorama 控件的只读 SelectedIndex 属性?

    在 OnNavigatedTo() 方法中设置: panoramaControl.DefaultItem = panoramaControl.Items[indexToSet];

  10. jQuery效率提升建议

    jQuery简洁通用的方法集把编码者从繁重的工作中解脱出来,也拉低了进入javascript的门槛,初学者对浏览器兼容性一无所知的情况下,几行代码就可以写出超炫的特效.网上有一篇文章转载比较泛滥,已经 ...