Apache Thrift - java开发教程
2016-07-29 15:33
429 查看
1.开发所需要的jar包:
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.9.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency
2. 安装Thrift环境:
安装thrift:到thrift官网下载exe文件,然后将文件重命名为thrift.exe,拷贝到c:\windows目录下(或者任何目录下),然后就可以在dos环境下使用了
c:\windows>thrift -gen java D:\mywork\javaProject\thriftTest\hello.thrift ,输出的java文件默认输出到当前目录下c:\windows,也可以使用-o参数指定输出路径
3.编写thrift 接口文件:
namespace java com.wolong.thrift
service Hello{
string helloString(1:string para)
i32 helloInt(1:i32 para)
bool helloBoolean(1:bool para)
void helloVoid()
string helloNull()
}
4.生成代码:
在wondows cmd中,切换到thrift.exe所在目录,运行一下代码:
thrift -o <output directory> -gen java Hello.thrift注意:.thrift文件要与thrift.exe放在同一目录下
完成后在指定目录下会生成一个目录gen-java,里面有Hello.java。
5.创建工程:
打开Eclipse或者Myeclipse,创建一个Java工程:导入刚才生成的Hello.java文件。
5.1 编写HelloServiceImpl 接口,接口实现Thrift定义文件中的服务。
import org.apache.thrift.TException;
public class HelloServiceImpl implements Hello.Iface{
public boolean helloBoolean(boolean para) throws TException{
return para;
}
public int helloInt(int para) throws TException{
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return para;
}
public String helloNull() throws TException{
return null;
}
public String helloString(String para) throws TException{
return para;
}
public void helloVoid() throws TException{
System.out.println("Hello World!");
}
}
5.2 编写服务器端
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TBinaryProtocol.Factory;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
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.TTransportException;
public class HelloServiceServer {
/**
* 启动thrift服务器
* @param args
*/
public static void main(String[] args) {
try{
//设置服务器端口为7911
TServerSocket serverTransport = new TServerSocket(7911);
//设置协议工厂为TBinaryProtocol.Factory
Factory proFactory = new TBinaryProtocol.Factory();
//关联处理器与Hello服务的实现
TProcessor processor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl());
TServer.Args tArgs = new TServer.Args(serverTransport);
tArgs.processor(processor);
tArgs.protocolFactory(proFactory);
//使用TSimpleServer
TServer server = new TSimpleServer(tArgs);
System.out.println("Start server on port 7911....");
server.serve();
}catch(TTransportException e){
e.printStackTrace();
}
}
}
5.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 org.apache.thrift.transport.TTransportException;
public class HelloServiceClient {
/**
* 调用Hello服务
* @param args
*/
public static void main(String[] args) {
try {
//设置调用的服务器为本地,端口为7911
TTransport transport = new TSocket("localhost", 7911);
transport.open();
//设置传输协议为TBinaryProtocol
TProtocol protocol = new TBinaryProtocol(transport);
Hello.Client client = new Hello.Client(protocol);
client.helloVoid();
transport.close();
} catch (TTransportException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5.4 运行结果
先运行服务器端,再运行客户端;
结果:Start server on port 7911....
Hello World!
二 : 服务模型实例演示(java)
注:Hello.java / HelloServiceImpl.java 见上生成的代码;
2.1 TSimpleServer服务端:单线程服务器端使用标准的阻塞式 I/O,简单的单线程服务模型
2.2 TThreadPoolServer 服务模型:线程池服务模型(多线程服务器端使用标准的阻塞式I/O),使用标准的阻塞式IO,预先创建一组线程处理请求
2.3 TNonblockingServer 服务模型/多线程服务器端使用非阻塞式 I/O :使用非阻塞式IO,服务端和客户端需要指定 TFramedTransport 数据传输的方式。
2.4 THsHaServer 服务模型:半同步半异步的服务端模型,需要指定为: TFramedTransport 数据传输的方式。
2.5 AsynClient 异步客户端
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.9.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency
2. 安装Thrift环境:
安装thrift:到thrift官网下载exe文件,然后将文件重命名为thrift.exe,拷贝到c:\windows目录下(或者任何目录下),然后就可以在dos环境下使用了
c:\windows>thrift -gen java D:\mywork\javaProject\thriftTest\hello.thrift ,输出的java文件默认输出到当前目录下c:\windows,也可以使用-o参数指定输出路径
3.编写thrift 接口文件:
namespace java com.wolong.thrift
service Hello{
string helloString(1:string para)
i32 helloInt(1:i32 para)
bool helloBoolean(1:bool para)
void helloVoid()
string helloNull()
}
4.生成代码:
在wondows cmd中,切换到thrift.exe所在目录,运行一下代码:
thrift -o <output directory> -gen java Hello.thrift注意:.thrift文件要与thrift.exe放在同一目录下
完成后在指定目录下会生成一个目录gen-java,里面有Hello.java。
5.创建工程:
打开Eclipse或者Myeclipse,创建一个Java工程:导入刚才生成的Hello.java文件。
5.1 编写HelloServiceImpl 接口,接口实现Thrift定义文件中的服务。
import org.apache.thrift.TException;
public class HelloServiceImpl implements Hello.Iface{
public boolean helloBoolean(boolean para) throws TException{
return para;
}
public int helloInt(int para) throws TException{
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return para;
}
public String helloNull() throws TException{
return null;
}
public String helloString(String para) throws TException{
return para;
}
public void helloVoid() throws TException{
System.out.println("Hello World!");
}
}
5.2 编写服务器端
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TBinaryProtocol.Factory;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
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.TTransportException;
public class HelloServiceServer {
/**
* 启动thrift服务器
* @param args
*/
public static void main(String[] args) {
try{
//设置服务器端口为7911
TServerSocket serverTransport = new TServerSocket(7911);
//设置协议工厂为TBinaryProtocol.Factory
Factory proFactory = new TBinaryProtocol.Factory();
//关联处理器与Hello服务的实现
TProcessor processor = new Hello.Processor<Hello.Iface>(new HelloServiceImpl());
TServer.Args tArgs = new TServer.Args(serverTransport);
tArgs.processor(processor);
tArgs.protocolFactory(proFactory);
//使用TSimpleServer
TServer server = new TSimpleServer(tArgs);
System.out.println("Start server on port 7911....");
server.serve();
}catch(TTransportException e){
e.printStackTrace();
}
}
}
5.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 org.apache.thrift.transport.TTransportException;
public class HelloServiceClient {
/**
* 调用Hello服务
* @param args
*/
public static void main(String[] args) {
try {
//设置调用的服务器为本地,端口为7911
TTransport transport = new TSocket("localhost", 7911);
transport.open();
//设置传输协议为TBinaryProtocol
TProtocol protocol = new TBinaryProtocol(transport);
Hello.Client client = new Hello.Client(protocol);
client.helloVoid();
transport.close();
} catch (TTransportException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5.4 运行结果
先运行服务器端,再运行客户端;
结果:Start server on port 7911....
Hello World!
二 : 服务模型实例演示(java)
注:Hello.java / HelloServiceImpl.java 见上生成的代码;
2.1 TSimpleServer服务端:单线程服务器端使用标准的阻塞式 I/O,简单的单线程服务模型
2.2 TThreadPoolServer 服务模型:线程池服务模型(多线程服务器端使用标准的阻塞式I/O),使用标准的阻塞式IO,预先创建一组线程处理请求
2.3 TNonblockingServer 服务模型/多线程服务器端使用非阻塞式 I/O :使用非阻塞式IO,服务端和客户端需要指定 TFramedTransport 数据传输的方式。
2.4 THsHaServer 服务模型:半同步半异步的服务端模型,需要指定为: TFramedTransport 数据传输的方式。
2.5 AsynClient 异步客户端
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序