文档章节

Thrift 使用

ksfzhaohui
 ksfzhaohui
发布于 2014/10/23 17:43
字数 586
阅读 379
收藏 9

      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("客户端发送数据.....");
	}
}

© 著作权归作者所有

上一篇: Netty的ip过滤
下一篇: Redis window环境
ksfzhaohui

ksfzhaohui

粉丝 389
博文 146
码字总数 207455
作品 3
南京
高级程序员
私信 提问
Python RPC 之 Thrift

thrift-0.12.0 python3.4.3 Thrift 简介: Thrift 是一款高性能、开源的 RPC 框架,产自 Facebook 后贡献给了 Apache,Thrift 囊括了整个 RPC 的上下游体系,自带序列化编译工具,因为 Thri...

dragon_tech
01/07
0
0
李铭昕/thrift-go-phalcon-project

phalcon-project Phalcon 官网 wiki 安装 安装项目 composer create-project limingxinleo/thrift-go-phalcon-project 使用Composer安装Thrift扩展后,把go的扩展包拷贝到GOPATH中(或建立软连......

李铭昕
2017/10/16
0
0
Thrift代理Hbase

使用HBase的2种方式: 1.直接使用HBase客户端API,这样就限制了只能使用java语言 2.使用一些能够将请求转换成API的代理,这些代理将原始Java API包装成其他协议,这样客户端可以使用API提供的...

ksfzhaohui
2016/09/22
666
0
使用thrift实现java与node.js的通讯

使用thrift实现java与node.js的通讯 其实之前thrift和node.js接触都很少,因为最近项目要用到node.js,并且需要涉及到java与node.js的通讯,就想到了thrift。因为使用的系统是Lion,所以这篇...

pantrick
2013/09/07
0
4
架构设计:系统间通信(11)——RPC实例Apache Thrift 上篇

1、概述 通过上一篇文章《架构设计:系统间通信(10)——RPC的基本概念》的介绍,相信读者已经理解了基本的RPC概念。为了加深这个理解,后面几篇文章我将详细讲解一款典型的RPC规范的实现A...

引鸩怼孑
2016/01/29
117
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot 整合redis

springboot整合redis官方是有文档的: 英文看不懂可以翻译,代码应该看得懂, 这个是自动注入的。当然也可以xml注入,手动配置。 整合步骤: pom文件: <!-- spring boot web --> ...

jason_kiss
27分钟前
2
0
手机耗电问题,大部分是没有正确使用这个“锁”

当安卓设备闲置时,设备很快会进入休眠状态,以达到省电和减少CPU占用的目的。但有些应用在手机灭屏甚至系统休眠时,依然频繁占用CPU处理事件或唤醒屏幕提示用户消息,这类行为会导致手机耗电...

安卓绿色联盟
28分钟前
1
0
UI 设计中的渐变

>**简评:**渐变是通过两种或多种不同的色彩来绘制一个元素,同时在颜色的交界处进行衰减变化的一种设计。从拟物到扁平再到渐变,人们慢慢发现它能创造出从未有过的一种色彩感觉 —— 独特、...

极光推送
34分钟前
3
0
powerdesigner name 转注释vb脚本

Option Explicit ValidationMode = True InteractiveMode = im_BatchDim mdl ' the current model' get the current active model Set mdl = ......

zhu97
38分钟前
2
0
V2Ray的安装与使用

1 1. bash <(curl -s -L https://git.io/v2ray.sh)yum update -y && yum install curl -y安装好 curl 之后就能安装脚本了输入快捷管理命令v2ray后,开始进行v2ray服务端配置...

吕湘颖
41分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部