Thrift安装
安装环境: Ubuntu 14.04
- 安装依赖
sudo apt-get install libboost1.54-all-dev libevent-dev g++ bison libssl-dev
- 安装thrift
下载最新的gz包: https://thrift.apache.org/download 写文档时,最新的thrift包为 thrift-0.9.3.tar.gz
# 解压
tar -xvzf thrift-0.9.3.tar.gz
# 配置
./configure
# 安装
sudo make & make install
最后,命令行中输入 thrift 显示如下的结果,则安装成功!如果没有安装成功,请check一下配置和安装过程,是否有错误,根据具体的错误google一下
Usage: thrift [options] file
Use thrift -help for a list of options
简单使用
thrift一个比较大的优势就是支持各种语言之间的RPC通信,因此接下来演示使用JAVA开发 Thrift的服务端,ruby开发客户端进行RPC通信过程。
设计.thrift文件,内容如下:
service TestService {
string serviceTest(1:string echoStr),
i32 add(1:i32, 2:i32)
}
生成各个语言的接口
thrift --gen java --gen rb testService.thrift
执行以上命令后,就会在当前文件夹生成如下的目录接口
baseDir
|_testService.thrift
|_gen_java
|_TestService.java
|_gen_rb
|_test_service.rb
|_test_service_constants.rb
|_test_service_types.rb
实现java服务端
- 引入libthrift.jar包,直接拷贝该jar包到你的项目或使用maven
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.9.3</version>
</dependency>
- 实现 TestService.Iface
import org.apache.thrift.TException;
public class TestServiceImpl implements TestService.Iface {
@Override
public String serviceTest(String echoStr) throws TException {
return "the echoStr is: " + echoStr;
}
@Override
public int add(int one, int two) {
return one + two;
}
}
- 配置服务
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.server.TNonblockingServer;
import org.apache.thrift.server.TServer;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TNonblockingServerSocket;
public class ThriftServer {
public void startServer(int port) {
try {
TProcessor tProcessor = new TestService.Processor(new TestServiceImpl());
TNonblockingServerSocket tNonblockingServerSocket = new TNonblockingServerSocket(port);
TNonblockingServer.Args tnbArgs = new TNonblockingServer.Args(tNonblockingServerSocket);
tnbArgs.processor(tProcessor);
tnbArgs.transportFactory(new TFramedTransport.Factory());
tnbArgs.protocolFactory(new TCompactProtocol.Factory());
TServer server = new TNonblockingServer(tnbArgs);
server.serve();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ThriftServer thriftServer = new ThriftServer();
thriftServer.startServer(6666);
}
}
通过运行ThriftServer就可以启动RPC java服务了
ruby客户端调用
- 安装thrift gem包
gem install thrift
- ruby脚本调用JAVA RPC服务
$:.push('../gen-rb') require 'thrift' require 'test_service'
port = ARGV[0] || 6666
host = "127.0.0.1"
transport = Thrift::FramedTransport.new(Thrift::Socket.new(host, port)) protocol = Thrift::CompactProtocol.new(transport) client = MakeCoffeeService::Client.new(protocol)
transport.open()
result = client.add(1, 2) p result
str = client.serviceTest('test') p str
运行这段ruby脚本就可以调用java 的RPC服务了
####### 附上thirft可定义的数据类型
基本类型:
bool:布尔值,true 或 false,对应 Java 的 boolean
byte:8 位有符号整数,对应 Java 的 byte
i16:16 位有符号整数,对应 Java 的 short
i32:32 位有符号整数,对应 Java 的 int
i64:64 位有符号整数,对应 Java 的 long
double:64 位浮点数,对应 Java 的 double
string:未知编码文本或二进制字符串,对应 Java 的 String
结构体类型:
struct:定义公共的对象,类似于 C 语言中的结构体定义,在 Java 中是一个 JavaBean
容器类型:
list:对应 Java 的 ArrayList
set:对应 Java 的 HashSet
map:对应 Java 的 HashMap
异常类型:
exception:对应 Java 的 Exception
服务类型:
service:对应服务的类
发布评论