原文出自【听云技术博客】:http://blog.tingyun.com/web/article/detail/1082
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
相关推荐
Thrift 支持多种编程语言,如 C++, Java, PHP, Python 等,使得在这些语言之间进行数据交换变得简单而高效。它提供了一种二进制协议,相比 JSON 或 XML,在性能和传输大小上有显著优势,特别适合大型系统的数据交互...
本文将基于Thrift的Java实现,总结学习过程中的一些关键知识点,旨在帮助理解Thrift的工作原理以及如何在Java环境中应用。 一、Thrift简介 Thrift是一种远程过程调用(RPC)框架,它通过定义一种中间描述文件(....
这个文件在Thrift开发过程中扮演着至关重要的角色,它能帮助开发者将定义好的Thrift接口文件(.thrift)转换为不同编程语言(如Java)的源代码。 Thrift的核心概念是定义一种中间表示(IDL,Interface Description ...
- 使用生成的Java代码,开发者需要实现Thrift定义的服务接口,创建一个服务器实例,监听特定端口,并处理客户端的请求。 7. **测试案例** - "thrift-server 最简单的测试案例"表明,项目可能包含一个简单的服务器...
6. **多语言支持**:Thrift的一大优点是支持多种编程语言,这意味着你可以用Python编写服务端,而客户端可以使用Java、C++、Go等其他语言,实现了跨平台的通信。 7. **异步编程**:Thrift支持异步编程模型,允许你...
通过这个项目,开发者可以轻松地集成 Thrift IDL(接口定义语言)编译器到 Maven 构建流程中,从而自动生成所需的 Java 代码。这使得开发者能够专注于业务逻辑,而无需手动处理底层通信细节。 ### Maven 与 Thrift ...
3. **编写Java代码**:使用生成的Java客户端代码,创建HBase连接,实例化Thrift客户端,然后调用其提供的方法来访问HBase表。通常包括以下步骤: - 连接Thrift服务器:通过`TSocket`或`TFramedTransport`建立与...
在Java中,这可能涉及`TServer`和`Processor`的实例化。 对于客户端,你可以使用Thrift生成的客户端类,创建服务代理,然后调用服务方法。这使得在不同语言间调用服务变得非常简单,只需关注业务逻辑,而无需关心...
5. **跨平台通信**:可能涉及如何在Web应用中使用Thrift JSClient与后端服务(可能是Java、Python或其他语言)进行通信。 6. **示例代码**:通常会提供实际的JavaScript代码片段,展示如何创建Thrift客户端对象,...
本文将详细介绍如何使用 Thrift 在 Java 环境下构建 `.jar` 文件,以便在不同的 Java 应用中使用 Thrift 生成的服务。 1. **安装 Thrift** 首先,你需要在本地安装 Thrift 编译器。访问 Thrift 官方网站...
- 创建Spring配置文件,如`thrift-server.xml`,配置Thrift服务器实例(通常是`TNonBlockingServer`或`TSimpleServer`)和Thrift服务处理器。 - 使用Spring的`<bean>`标签定义Thrift服务接口的实现,并通过`@...
在IT行业中,Spring框架是Java领域最常用的轻量级应用框架之一,而Thrift则是一种高性能、语言无关、跨平台的远程过程调用(RPC)框架。本篇将详细讲解如何将Spring与Thrift整合,构建一个Server和Client,以实现...
在学习这个实例时,你需要理解Thrift的IDL语法,如何使用Thrift编译器生成代码,以及如何在Java环境中集成和使用Thrift库。此外,你还需要了解如何配置和运行Thrift服务以及客户端,这通常涉及到网络通信、序列化和...
这个"thrift-Demo"应该是一个演示如何使用Thrift的实例,包含了一系列的步骤和文件,帮助初学者理解Thrift的工作原理和使用方法。 在Thrift中,我们首先需要创建一个`.thrift`文件,这个文件定义了服务的接口和数据...
在"Thrift入门及Java实例演示"中,我们可以预期学习到以下核心知识点: 1. **Thrift IDL**:Thrift的接口定义语言类似于C++或Java的接口,用于定义服务、结构体、异常和枚举等。例如,你可以定义一个简单的服务,...
《Thrift下Java服务器与客户端开发指南》 Thrift是一种高性能、可扩展的跨语言服务开发框架,由Facebook开发并开源。它通过定义一个中间表示(IDL,Interface Description Language)来描述服务,允许开发者在不同...
在这个"thrift的java和python结合例子"中,我们将探讨如何使用Thrift在Java和Python之间建立通信。 首先,Thrift通过定义接口描述文件(.thrift)来规范服务的接口。这个文件使用Thrift IDL(Interface Description...
- **创建Server.java**: 这是服务器的主入口,它会实例化服务实现,并使用Thrift的TServer来启动服务器监听端口,等待客户端连接。 4. **创建Java客户端** 在客户端,我们需要创建一个TTransport对象来连接到...
4. **创建客户端**:在客户端,我们可以使用生成的Java代码创建Thrift客户端,实例化Transport和Protocol,并通过这些对象调用远程服务的方法。 5. **连接与通信**:通过TCP或HTTP等协议,客户端与服务端建立连接,...
- **创建服务器**:另外,我们需要一个服务器类(如`Server.java`)来实例化服务实现并启动监听。服务器通常会使用`TServer`类(如`TSimpleServer`或`TForkingServer`)来启动Thrift服务。 4. **创建Java客户端** ...