thift java安装win7_Thrift在windows7下的安装与实践

本文借鉴自

(下面称简书教程)

首先上官网下载代码

解压之后放在路径C:\thrift-0.9.3\thrift-0.9.3

并下载windows执行版thrift-0.9.3.exe

放在路径C:\thrift-0.9.3下

下载apache ant项目,用于打jar包

下载路径

解压之后放在路径C:\apache-ant-1.9.7-bin\apache-ant-1.9.7

配置环境变量

ANT_HOME  : C:\apache-ant-1.9.7-bin\apache-ant-1.9.7

把C:\apache-ant-1.9.7-bin\apache-ant-1.9.7\bin\ant.bat复制到路径C:\thrift-0.9.3\thrift-0.9.3\lib\java下

在cmd中运行ant.bat,会生成jar包libthrift-0.9.3 在路径C:\thrift-0.9.3\thrift-0.9.3\lib\java\build

在路径C:\thrift-0.9.3中创建一个文本文件

复制代码namespace java com.winwill.thrift

enum RequestType {

SAY_HELLO,   //问好

QUERY_TIME,  //询问时间}struct Request {

1: required RequestType type;  // 请求的类型,必选

2: required string name;       // 发起请求的人的名字,必选

3: optional i32 age;           // 发起请求的人的年龄,可选

}

exception RequestException {

1: required i32 code;

2: optional string reason;

}

// 服务名

service HelloWordService {

string doAction(1: Request request) throws (1:RequestException qe);

// 可能抛出异常。

}

保存为Test.thrift

在cmd中进入路径C:\thrift-0.9.3

执行命令thrift-0.9.3 -gen java Test.thrift

会在路径C:\thrift-0.9.3下生成一个文件夹gen-java

在Eclipse中创建工程TestThrift

按照简书教程生成package

com.winwill.thrift

把上面生成的gen-java中的代码复制到package中

并在package中创建代码,由于可能跟简书教程使用的版本不同,简书教程中的某些写法无法编译,

经过修改后使用如下代码

1.服务端package com.winwill.thrift;

import org.apache.commons.lang3.StringUtils;

import org.apache.thrift.TException;

import java.util.Date;

public class HelloWordServiceImpl implements com.winwill.thrift.HelloWordService.Iface {

// 实现这个方法完成具体的逻辑。

public String doAction(com.winwill.thrift.Request request) throws com.winwill.thrift.RequestException, TException {

System.out.println("Get request: " + request);

if (StringUtils.isBlank(request.getName()) || request.getType() == null) {

throw new com.winwill.thrift.RequestException();

}

String result = "Hello, " + request.getName();

if (request.getType() == com.winwill.thrift.RequestType.SAY_HELLO) {

result += ", Welcome!";

} else {

result += ", Now is " + new Date().toLocaleString();

}

return result;

}

}

2.启动服务package com.winwill.thrift;

import org.apache.thrift.protocol.TBinaryProtocol;

import org.apache.thrift.protocol.TCompactProtocol;

import org.apache.thrift.protocol.TJSONProtocol;

import org.apache.thrift.protocol.TProtocolFactory;

import org.apache.thrift.server.TServer;

import org.apache.thrift.server.TSimpleServer;

import org.apache.thrift.transport.TFastFramedTransport;

import org.apache.thrift.transport.TFramedTransport;

import org.apache.thrift.transport.TServerSocket;

import org.apache.thrift.transport.TTransportFactory;

import org.slf4j.*;

import java.net.ServerSocket;

public class HelloWordServer {

public static void main(String[] args) throws Exception {

int port = 7912;

String transport_type = "buffered";

String protocol_type = "binary";

String server_type = "thread-pool";

String domain_socket = "";

//        ServerSocket socket = new ServerSocket(7912);

// Protocol factory

TProtocolFactory tProtocolFactory = null;

if (protocol_type.equals("json")) {

tProtocolFactory = new TJSONProtocol.Factory();

} else if (protocol_type.equals("compact")) {

tProtocolFactory = new TCompactProtocol.Factory();

} else {

tProtocolFactory = new TBinaryProtocol.Factory();

}

TTransportFactory tTransportFactory = null;

if (transport_type.equals("framed")) {

tTransportFactory = new TFramedTransport.Factory();

} else if (transport_type.equals("fastframed")) {

tTransportFactory = new TFastFramedTransport.Factory();

} else { // .equals("buffered") => default value

tTransportFactory = new TTransportFactory();

}

TServerSocket serverTransport = new TServerSocket(new TServerSocket.ServerSocketTransportArgs().port(port));;

com.winwill.thrift.HelloWordService.Processor processor = new com.winwill.thrift.HelloWordService.Processor(new HelloWordServiceImpl());

TServer.Args tServerArgs = new TServer.Args(serverTransport);

tServerArgs.processor(processor);

tServerArgs.protocolFactory(tProtocolFactory);

tServerArgs.transportFactory(tTransportFactory);

TServer server = new TSimpleServer(tServerArgs);

System.out.println("Running server...");

server.serve();

}

}

3.客户端请求package com.winwill.thrift;

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 HelloWordClient {

public static void main(String[] args) throws Exception {

TTransport transport = new TSocket("【此处使用服务器ip地址】", 7912);

TProtocol protocol = new TBinaryProtocol(transport);

// 创建client

com.winwill.thrift.HelloWordService.Client client = new com.winwill.thrift.HelloWordService.Client(protocol);

transport.open();  // 建立连接

// 第一种请求类型

com.winwill.thrift.Request request = new com.winwill.thrift.Request()

.setType(com.winwill.thrift.RequestType.SAY_HELLO).setName("winwill2012").setAge(24);

System.out.println(client.doAction(request));

// 第二种请求类型

request.setType(com.winwill.thrift.RequestType.QUERY_TIME).setName("winwill2012");

System.out.println(client.doAction(request));

transport.close();  // 请求结束,断开连接

}

}

在一台服务器上测试启动服务

输出Running server...

在另一台机器启动客户端

输出

Hello, winwill2012, Welcome!

Hello, winwill2012, Now is 2016-10-13 17:06:47

此时服务器端输出

Get request: Request(type:SAY_HELLO, name:winwill2012, age:24)

Get request: Request(type:QUERY_TIME, name:winwill2012, age:24)

说明已经成功连接啦

本文所用到的工具和工程已经打包上传到云盘,欢迎大家下载

链接:http://pan.baidu.com/s/1jHQXSma 密码:65uh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值