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

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. 【CSS进阶】box-shadow 与 filter:drop-shadow 详解及奇技淫巧

    box-shadow 在前端的 CSS 编写工作想必十分常见.但是 box-shadow 除去它的常规用法,其实还存在许多不为人知的奇技淫巧. 喜欢 markdown 版本的可以戳这里. box-sh ...

  2. MySQL学习笔记九:存储过程,存储函数,触发器

    存储过程 1.存储过程由一组特定功能的SQL语句组成,对于大型应用程序优势较大,相对不使用存储过程,具有以下优点: a.性能提高,因为存储过程是预编译的,只需编译一次,以后调用就不须再编译 b.重用性 ...

  3. jQuery打造智能提示插件二(可编辑下拉框)

    在上一篇 jQuery打造智能提示插件 上改进,增加下拉按钮,修复点击下拉区域外不隐藏BUG 效果 下拉按钮素材: js封装,注意红色部分为BUG修复,然后传入boxwidth不带px: /* /// ...

  4. 大小写互换-"数字字符串"转换成数字

    今天穿着hacker浑浊马甲在百度编程课堂实训习题中发现了这个很简单的问题,就做了下. 为了考虑输入的是否是数字,结果写好后竟然超时了. 不过里面用到的将字符串装换成数字的方法,感觉是个收获,因此在此 ...

  5. TCP滑动窗口机制的简洁模型

    模型图: 我们可以大概看一下上图的模型: 首先是AB之间三次握手建立TCP连接.在报文的交互过程中,A将自己的缓冲区大小(窗口大小)3发送给B,B同理,这样双方就知道了对端的窗口大小. A开始发送数据 ...

  6. nodejs学习笔记一——nodejs安装

    a.nodejs安装 nodejs的安装没有什么说的默认安装即可.安装包官网下载即可:nodejs官网 本人用的是window的安装包node-v4.2.6-x64.msi 安装完成后打开命令行查看使 ...

  7. C#程序开发中经常遇到的10条实用的代码

    1 读取操作系统和CLR的版本 OperatingSystem os = System.Environment.OSVersion; Console.WriteLine("Platform: ...

  8. 使用Executor管理线程

    上一篇博客(第一个并发程序:定义任务和驱动任务)中,我们使用Thread对象启动线程,而java.util.concurrent包的Executor执行器提供了更好的管理Thread对象的方法,从而简 ...

  9. css3+visbibilty解决淡入淡出问题

    .fade{ visibility: hidden; opacity: ; transition: all .5s; } .fade.on { visibility: visible; opacity ...

  10. 积累一下SQL

    开篇先自我检讨一下,写了博客几年以来首次试过连续两个月没出过博文,有客观也有主观原因,但是最近这年里博文数量也越来越少,博文的质量也每况日下.希望自己一直能坚持下来,多写写博文,这月尽量多写几篇来弥补 ...