Thrift 使用

Thrift是一种可伸缩的跨语言服务的发展软件框架。它结合了功能强大的软件堆栈的代码生成引擎,以建设服务,工作效率和无缝地与C + +,C#,Java,Python和PHP和Ruby结合。
     Thrift通过接口定义语言 (interface definition language,IDL) 来定义数据类型和服务,Thrift接口定义文件由Thrift代码编译器生成thrift目标语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。

下载地址:http://thrift.apache.org/   这里我们下载:Thrift compiler for Windows (thrift-0.9.1.exe)
maven dependency:

<dependency>
	<groupId>org.apache.thrift</groupId>
	<artifactId>libthrift</artifactId>
	<version>0.9.1</version>
</dependency>

接口定义语言:

namespace java thrift.clazz
struct  NewsModel{
	1:i32 id ;
	2:string title;
	3:string content;
	4:string media_from;
	5:string author;
}
service IndexNewsOperatorServices {
	bool indexNews(1:NewsModel indexNews),
	bool deleteArtificiallyNews(1:i32 id )
}

更多关于接口定义语言:
http://www.cnblogs.com/tianhuilove/archive/2011/09/05/2167669.html

由接口定义语言生成相应语言的类

thrift --gen <language> <Thrift filename>

这里我们写一个简单的bat文件

thrift-0.9.1.exe --gen java idl/*.thrift
pause

将idl文件夹下面的接口定义文件生成java类,文件自动生成在  gen-java  文件夹下面。

下面我们用java了测试:

1.首先实现定义的IndexNewsOperatorServices的是实现类:

import org.apache.thrift.TException;

import thrift.clazz.IndexNewsOperatorServices;
import thrift.clazz.NewsModel;

public class IndexNewsOperatorServicesImpl implements
		IndexNewsOperatorServices.Iface {

	@Override
	public boolean indexNews(NewsModel indexNews) throws TException {
		System.out.println("method success !!  data  is :" + indexNews);
		return false;
	}

	@Override
	public boolean deleteArtificiallyNews(int id) throws TException {
		System.out.println("method success !!  id is :" + id);
		return false;
	}
}

2.实现服务器端:

import java.net.InetSocketAddress;

import org.apache.thrift.protocol.TBinaryProtocol;
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.TServerTransport;
import org.apache.thrift.transport.TTransportFactory;

import thrift.clazz.IndexNewsOperatorServices;

public class ThriftServerTest {
	public static void main(String[] args) {
		@SuppressWarnings({ "rawtypes", "unchecked" })
		IndexNewsOperatorServices.Processor processor = new IndexNewsOperatorServices.
                           Processor(new IndexNewsOperatorServicesImpl());
		try {
			TServerTransport serverTransport = new TServerSocket(
					new InetSocketAddress("127.0.0.1", 8081));
			Args trArgs = new Args(serverTransport);
			trArgs.processor(processor);

                         trArgs.protocolFactory(new TBinaryProtocol.Factory(true, true));//使用二进制来编码应用层的数据
			trArgs.transportFactory(new TTransportFactory());//使用普通的socket来传输数据  

			TServer server = new TThreadPoolServer(trArgs);
			System.out.println("server启动监听客户端连接......");
			server.serve();
		} catch (Exception e) {
			throw new RuntimeException("index thrift server start failed!!"
					+ "/n" + e.getMessage());
		}
	}
}

3.实现客户端:

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 thrift.clazz.IndexNewsOperatorServices;
import thrift.clazz.NewsModel;

public class ThriftClientTest {

	public static void main(String[] args) throws TException {
		TTransport transport = new TSocket("127.0.0.1", 8081);
		TProtocol protocol = new TBinaryProtocol(transport);
		IndexNewsOperatorServices.Client client = new IndexNewsOperatorServices                .Client(protocol);
		transport.open();

		client.deleteArtificiallyNews(123456);
		NewsModel newsModel = new NewsModel();
		newsModel.setId(1);
		newsModel.setTitle("编程语言");
		newsModel.setContent("java,c,c++,c#,php,js......");
		newsModel.setAuthor("ksfzhaohui");
		newsModel.setMedia_from("火星");
		client.indexNews(newsModel);
		transport.close();
		System.out.println("客户端发送数据.....");
	}
}
时间: 2024-10-12 22:44:56

Thrift 使用的相关文章

Thrift使用实例

首先下载thrift.exe,和对应lib包.注意版本一定要一致. 否则编译会不识别出现错误. 可能会出现org.slf4j这个错误,那么你要把slf4j-api.jar下载下来引入到你的project中 namespace java com.nerd.thrift.service /** * */ service sayThriftService{ void say(); } 通过在命令行中转到 thrift-1.8.0.exe -gen java  sayThriftService 在磁盘目

thrift

基本类型 bool :布尔类型( true or value),占一个字节 byte:有符号字节 i16:16位有符号整型 i32:32位有符号整型 i64:64位有符号整型 double :64位浮点数 string:未知编码或者二进制的字符串 注意,thrift不支持无符号整型,因为很多目标语言不存在无符号整型(如java). 支持的传输格式 * TBinaryProtocol : 二进制编码格式进行数据传输.    * TCompactProtocol : 这种协议非常有效的,使用Vari

Openresty使用Thrift安装步骤

最新想用Golang与Openresty相互通讯调用,使用RPC协议来实现,后来研究最终选择了Thrift:主要还是FB实现了支持Lua和Go模块,直接编译就可以成功嵌套使用,非常方便:研究了两天最后编译成功,于是便把使用步骤做下记录. 1.Mac安装Thrift brew install thrift 2.Apache官网地址Thrift0.10下载地址 或者 git clone https://git-wip-us.apache.org/repos/asf/thrift.git thrift

thrift总结

定义: Apache Thrift是一个facebook建立的RPC框架,现在是一个Apache的顶级项目.Thrift允许通过一个跨语言的定义文件的方式定义数据类型和服务接口,[这个文件]作为[RPC]客户端和服务器通信的标准 thrift安装: ①安装依赖:$ yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-dev

Thrift CentOS安装和使用

Thrift是Apache的一个开源的跨语言服务开发框架,它提供了一个代码生成引擎来构建服务,支持C++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,JavaScript,Node.js,Smalltalk,OCaml,Delphi等多种编程语言. 一般来说,使用Thrift来开发应用程序,主要建立在两种场景下: 第一,在我们开发过程中,一个比较大的项目需要多个团队进行协作,而每个团队的成员在编程技术方面的技能可能不一定相同,为了实现这种跨

基于Thrift的跨语言、高可用、高性能、轻量级的RPC框架

功能介绍 跨语言通信 方便的使Java.Python.C++三种程序可以相互通信 负载均衡和容灾处理 方便的实现任务的分布式处理 支持服务的水平扩展,自动发现新的服务节点 能够兼容各种异常情况,如节点的异常down机 可视化管理 通过服务管理系统可以方便查看服务状态和统计信息 与原生thrift通信 支持与原生thrift服务进行通信 与业内方案的对比 与thrift.avro.hessian相比,harpc支持了高可用,并且更加易用 与dubbo相比,harpc支持了跨语言,并且更轻量级 与i

EJB、RMI、XMLRPC、Hessian、Thrift 、Protobuf

Java中实现分布式的方式有:EJB.RMI.XMLRPC.Web Service.Hessian.Thrift .Protobuf.NIO(Netty.Mina) EJB 优势:可扩展性好,安全性强,支持分布式事务处理. 劣势:不能跨语言:配置相对复杂,不同J2EE容器之间很难做无缝迁移. RMI 优势:面向对象的远程服务模型:基于TCP协议上的服务,执行速度快. 劣势:不能跨语言:每个远程对象都要绑定端口,不易维护:不支持分布式事务JTA,RMI框架对于安全性.事务.可扩展性的支持非常有限.

RPC框架之Thrift

目前流行的服务调用方式有很多种,例如基于SOAP消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等.其中所用到的数据传输方式包括 XML,JSON 等,然而 XML 相对体积太大,传输效率低,JSON 体积较小,新颖,但还不够完善. 本文将介绍由 Facebook 开发的远程服务调用框架 Apache Thrift,它采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中,如 C++, Java, Python, PH

Thrift实现C#调用Java开发步骤详解

转载请注明出处:jiq?钦's technical Blog Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架. 类似的跨语言RPC框架还有ICE.Hessian.Protocol Buffer.Avro等. 1 下载Thrift 下载地址:http://thrift.apache.org/download thrift-0.9.3.exe         用于编译Thrift中间文件生成对应语言代码的工具 thrift-0.9.3.tar

使用Thrift RPC编写程序(服务端和客户端)

1. Thrift类介绍 Thrift代码包(位于thrift-0.6.1/lib/cpp/src)有以下几个目录: concurrency:并发和时钟管理方面的库processor:Processor相关类protocal:Protocal相关类transport:transport相关类server:server相关类 1.1 Transport类(how is transmitted?)负责数据传输,有以下几个可用类:TFileTransport:文件(日志)传输类,允许client将文件