博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Thrift 使用
阅读量:7163 次
发布时间:2019-06-29

本文共 3822 字,大约阅读时间需要 12 分钟。

hot3.png

      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协议层和传输层的实现。 
下载地址:   这里我们下载:Thrift compiler for Windows (thrift-0.9.1.exe)
maven dependency:

org.apache.thrift
libthrift
0.9.1
接口定义语言:
namespace java thrift.clazzstruct  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 )  }
更多关于接口定义语言:
由接口定义语言生成相应语言的类
thrift --gen 
这里我们写一个简单的bat文件
thrift-0.9.1.exe --gen java idl/*.thriftpause
将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("客户端发送数据.....");	}}

转载于:https://my.oschina.net/OutOfMemory/blog/336734

你可能感兴趣的文章