1.下载与安装
官方网站:http://thrift.apache.org/
下载地址:http://labs.renren.com/apache-mirror//thrift/0.6.1/thrift-0.6.1.tar.gz
安装Thrift:
- cd /usr/local/src
- wget http://labs.renren.com/apache-mirror//thrift/0.6.1/thrift-0.6.1.tar.gz
- tar zxvf avro-src-1.5.1.tar.gz
- cd thrift-0.6.1
- ./configure
- make
- make install
进入lib/java目录,执行以下命令编译并生成jar包,请确保已经安装了ant和maven.
安装后,libthrift-0.6.1-snapshot.jar位于thrift-0.6.1/lib/java/build目录
2.消息结构与服务接口
基本数据类型:
- bool: A boolean value (true or false)
- byte: An 8-bit signed integer
- i16: A 16-bit signed integer
- i32: A 32-bit signed integer
- i64: A 64-bit signed integer
- double: A 64-bit floating point number
- string: A text string encoded using UTF-8 encoding
特殊数据类型:
- binary: a sequence of unencoded bytes. Translates to a Java ByteBuffer
容器:
- list<type>: An ordered list of elements. Translates to a Java ArrayList
- set<type>: An unordered set of unique elements. Translates to a Java HashSet
- map<type1,type2>: A map of strictly unique keys to values. Translates to a Java HashMap
首先需要编写一个.thrift文件,定义一个消息结构。如下是message.thrift文件内容:
- namespace java thrift
-
- struct Message {
- 1: string name,
- 2: i32 type,
- 3: double price,
- 4: bool valid,
- 5: binary content
- }
-
- service MessageService {
- Message getMessage(1:Message msg)
- }
其中定义了1个结构叫做Message,位于包thrift中,有5个成员name、type、price、valid、content。还定义了1个服务叫做MessageService,其中有一个getMessage方法,需要输入一个参数,类型是message,返回值类型是message。
编写完message.thrift文件后,执行以下命令,将会gen-java目录中生成相应的java文件,类MessageService的包是thrift。
- thrift --gen java message.thrift
3.rpc通信实现
Thrift会生成结构类和服务类,假设生成的类分别是Message和MessageService,MessageService中定义了服务getMessage(Message msg)。
服务接口实现MessageServiceImpl.java:
-
package thrift;
-
-
import org.apache.thrift.TException;
-
import thrift.MessageService.Iface;
-
-
public class MessageServiceImpl implements Iface {
-
-
@Override
-
public Message getMessage(Message msg) throws TException {
-
// process the message
- …
-
return msg;
-
}
-
- }
服务端实现Server.java:
-
package thrift;
-
-
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.transport.TServerSocket;
-
-
public class Server {
-
private int port;
-
-
public Server(int port) {
-
this.port = port;
-
}
-
-
public void run() {
-
try {
-
TServerSocket serverTransport = new TServerSocket(port);
-
MessageService.Processor processor = new MessageService.Processor(
-
new MessageServiceImpl());
-
Factory protFactory = new TBinaryProtocol.Factory(true, true);
-
TThreadPoolServer.Args args = new TThreadPoolServer.Args(
-
serverTransport);
-
args.processor(processor);
-
args.protocolFactory(protFactory);
-
TServer server = new TThreadPoolServer(args);
-
server.serve();
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
-
-
public static void main(String[] args) {
-
if (args.length != 1) {
-
System.out.println("Usage: Server port");
-
return;
-
}
-
int port = Integer.parseInt(args[0]);
-
new Server(port).run();
-
}
- }
客户端实现Client.java:
-
package thrift;
-
-
import java.nio.ByteBuffer;
-
import java.util.Arrays;
-
-
import org.apache.thrift.protocol.TBinaryProtocol;
-
import org.apache.thrift.protocol.TProtocol;
-
import org.apache.thrift.transport.TSocket;
-
import org.apache.thrift.transport.TTransport;
-
-
public class Client {
-
private int port;
-
private String host;
-
private int size;
-
private int count;
-
-
public Client(int port, String host, int size, int count) {
-
super();
-
this.port = port;
-
this.host = host;
-
this.size = size;
-
this.count = count;
-
}
-
-
public long run() {
-
long start = 0;
-
long end = 0;
-
TTransport transport = null;
-
try {
-
transport = new TSocket(host, port);
-
TProtocol protocol = new TBinaryProtocol(transport);
-
MessageService.Client client = new MessageService.Client(protocol);
-
transport.open();
-
-
Message message = new Message();
-
// initiate the message
- …
-
-
start = System.currentTimeMillis();
-
for (int i = 0; i < count; i++) {
-
client.getMessage(message);
-
}
-
end = System.currentTimeMillis();
-
System.out.println(end - start);
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
if (transport != null) {
-
transport.close();
-
}
-
}
-
-
return end - start;
-
}
-
-
public static void main(String[] args) {
-
if (args.length != 4) {
-
System.out.println("Usage: Client host port dataSize count");
-
return;
-
}
-
String host = args[0];
-
int port = Integer.parseInt(args[1]);
-
int size = Integer.parseInt(args[2]);
-
int count = Integer.parseInt(args[3]);
-
-
new Client(port, host, size, count).run();
-
}
- }
4.参考资料
(1) Thrift wiki: http://wiki.apache.org/thrift/
分享到:
相关推荐
在本项目"RPC-code_rpc_"中,我们关注的是RPC的实现,特别是通过Thrift和RMI两种技术进行服务器间的交互。 **Thrift** 是Facebook开源的一种高性能、跨语言的服务交互框架。它的主要功能是生成跨语言的客户端和...
本例是一个简单的thrift测试程序,包括客户端和服务端。thrift允许你定义一个简单的定义文件中的数据类型和服务接口。以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。
总的来说,"thrift_castle2t1_thrift_Known_"这个项目揭示了一个基于Thrift构建的成熟服务,其源代码可以帮助我们学习Thrift的使用,理解跨语言服务交互的机制,并从中汲取构建高效分布式系统的经验。通过对源码的...
标题中的“test_hive.rar_ThriftHive.php_hive_hive php_php hive_php hive Thr”暗示了我们讨论的主题是关于使用PHP通过Thrift接口与Hive数据仓库进行交互的一个库,具体来说,是一个名为“ThriftHive.php”的文件...
压缩包内的“CSS_namespace_thrift接口文档2.txt”可能包含了关于如何定义和使用这些命名空间的详细说明,包括如何处理跨服务通信时的命名冲突,以及如何为不同的CSS服务定义独特的命名空间。可能还涵盖了如何在实际...
总结一下,"hbase_hive_thrift_php"这个主题涵盖了如何使用PHP通过Thrift与HBase和Hive进行交互,以实现大数据的存储、管理和Web应用中的查询。这种技术栈对于需要在PHP环境中处理大规模数据的项目非常有价值。
安装完成后,你需要编写Thrift IDL文件定义服务接口,然后使用Thrift编译器生成Python代码。接着,创建你的Thrift服务实现,通常这会包含一个继承自Thrift生成的类的Python类。最后,配置Gunicorn以启动并托管这个...
Thrift是一种跨语言的服务开发框架,它能够通过定义服务接口和数据类型来生成多语言的客户端和服务器代码,实现高效、简洁的RPC(远程过程调用)通信。 Gunicorn,全称Green Unicorn,是一款广泛使用的Python WSGI...
本篇文章将围绕“php_thrift_python安装测试记录”这一主题,深入探讨如何在PHP中使用Thrift客户端调用Python服务端,并分享相关的安装步骤和代码示例。 首先,我们来看Thrift的基本工作原理。Thrift通过一种中间...
在这个"**HBASE_thrift_cpp.rar**"压缩包中,我们可以推测其内容可能包含了一套使用C++语言通过Thrift与HBase进行交互的示例或库。下面将详细解释如何使用C++通过Thrift访问HBase以及涉及的关键知识点。 1. **...
这通常包括创建Thrift定义文件(.thrift),该文件描述服务接口和数据结构,然后使用Thrift编译器生成相应的Python代码。 Thrift的主要优点在于它的性能和可扩展性。由于其底层使用C++实现,与网络交互时的性能较高...
资源分类:Python库 所属语言:Python 资源全名:ctec_thrift_client_py3-1.0.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源来自pypi官网。 资源全名:takumi_thrift-0.2.1-py2.py3-none-any.whl
资源分类:Python库 所属语言:Python 资源全名:atc_thrift-0.1.5.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
使用thrift、websocket在javascript和c++之间建立rpc调用机制。 如果要使用js+html来写界面,cpp来写底层业务逻辑,这就非常有用了。 当然,如果底层不用cpp来写,也可以参考本代码的js对thrift的rpc包装。
例如,可以使用Thrift来构建跨语言的RPC(远程过程调用)服务,使不同语言的客户端能够无缝调用服务端功能。同时,由于其高效和轻量级的特性,Thrift也被广泛应用于大数据处理和实时分析系统中。
java运行依赖jar包
Thrift RPC客户端的服务化框架代码主要涉及了两个关键概念:Thrift和RPC(Remote Procedure Call,远程过程调用)。Thrift是由Facebook开发的一种开源跨语言服务框架,它允许定义数据类型和服务接口,然后自动生成...