一、环境与配置
1.操作系统Win10
2.IDEA Java
3.Thrift version 0.10.0
二、准备工作
1.下载 thrift.exe 文件(本文附件中)
2.配置环境变量
D盘创建文件夹 thrift 把 thrift.exe 文件放在下面 D:\thrift\thrift.exe
3.Maven 中加入 lib 库
<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.10.0</version>
</dependency>
4.命令行下输入 thrift -version 检测是否配置成功
三、生成相应语言代码
1. 创建 .thrift 文件
目录结构
Hello.thrift
namespace java com.dokee.manager.core.thrift
enum RequestType {
SAY_HELLO, //问好
QUERY_TIME, //询问时间
}
struct HelloWordRequest {
1: required RequestType type; // 请求的类型,必选
2: required string name; // 发起请求的人的名字,必选
3: optional i32 age; // 发起请求的人的年龄,可选
}
exception RequestException {
1: required i32 code;
2: optional string reason;
}
// 服务名
service HelloWordHandle {
string doAction(1: HelloWordRequest request) throws (1:RequestException qe); // 可能抛出异常。
}
基本语法与详细介绍请参考
http://www.jianshu.com/p/0f4113d6ec4b
2.生成对应代码
命令行下 cd 到 对应.thrift 文件目录中 ,然后输入 thrift –gen javaHello.thrift
会输出对应语言的代码
3.实现对应接口
package com.dokee.manager.core.thrift.impl;
import com.dokee.manager.core.thrift.HelloWordHandle;
import com.dokee.manager.core.thrift.HelloWordRequest;
import com.dokee.manager.core.thrift.RequestException;
import com.dokee.manager.core.thrift.RequestType;
import org.apache.thrift.TException;
import org.common5iq.util.Utils;
import java.util.Date;
public class HelloWordHandleImpl implements HelloWordHandle.Iface {
// 实现这个方法完成具体的逻辑。
public String doAction(HelloWordRequest request) throws RequestException, TException {
System.out.println("Get request: " + request);
if (Utils.isBlank(request.getName()) || request.getType() == null) {
throw new RequestException();
}
String result = "Hello, " + request.getName();
if (request.getType() == RequestType.SAY_HELLO) {
result += ", Welcome!";
} else {
result += ", Now is " + new Date().toLocaleString();
}
return result;
}
}
四、测试
1.创建服务器端
此次用java作为服务器端 HelloWordServer.java 也可用C++作为服务器端来测试
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadedSelectorServer;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TNonblockingServerSocket;
/**
* @author qifuguang
* @date 15/9/11 16:07
*/
public class HelloWordServer {
public static final int SERVER_PORT = 8989;
public static void main(String[] args) throws Exception {
TProcessor tprocessor = new HelloWordHandle.Processor(new HelloWordHandleImpl());
// 传输通道 - 非阻塞方式
TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(SERVER_PORT);
//多线程半同步半异步
TThreadedSelectorServer.Args tArgs = new TThreadedSelectorServer.Args(serverTransport);
tArgs.processor(tprocessor);
tArgs.transportFactory(new TFramedTransport.Factory());
//二进制协议
tArgs.protocolFactory(new TCompactProtocol.Factory());
// 多线程半同步半异步的服务模型
TServer server = new TThreadedSelectorServer(tArgs);
System.out.println("HelloTThreadedSelectorServer start....");
server.serve(); // 启动服务
}
}
(new HelloWordHandleImpl());
// 传输通道 - 非阻塞方式
TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(SERVER_PORT);
//多线程半同步半异步
TThreadedSelectorServer.Args tArgs = new TThreadedSelectorServer.Args(serverTransport);
tArgs.processor(tprocessor);
tArgs.transportFactory(new TFramedTransport.Factory());
//二进制协议
tArgs.protocolFactory(new TCompactProtocol.Factory());
// 多线程半同步半异步的服务模型
TServer server = new TThreadedSelectorServer(tArgs);
System.out.println("HelloTThreadedSelectorServer start....");
server.serve(); // 启动服务
}
}
2.创建 HelloClient.java
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
/**
* @author qifuguang
* @date 15/9/11 16:13
*/
public class HelloWordClient {
public static final String SERVER_IP = "localhost";
public static final int SERVER_PORT = 8989;
public static final int TIMEOUT = 30000;
public static void main(String[] args) throws Exception {
//设置传输通道,对于非阻塞服务,需要使用TFramedTransport,它将数据分块发送
TTransport transport = new TFramedTransport(new TSocket(SERVER_IP,
SERVER_PORT, TIMEOUT));
//使用高密度二进制协议
TProtocol protocol = new TCompactProtocol(transport);
// 创建client
HelloWordHandle.Client client = new HelloWordHandle.Client(protocol);
transport.open(); // 建立连接
// 第一种请求类型
HelloWordRequest request = new HelloWordRequest()
.setType(RequestType.SAY_HELLO).setName("winwill2012").setAge(24);
System.out.println(client.doAction(request));
// 第二种请求类型
request.setType(RequestType.QUERY_TIME).setName("winwill2012");
System.out.println(client.doAction(request));
transport.close(); // 请求结束,断开连接
}
}
运行 HelloClient.java 控制台打印
今天的文章IDEA Java Thrift Hello world-猫分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/67701.html