1、安装thrift
终端使用命令,安装homebrew
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
然后 安装thrift 0.9.3(网上随便一个教程跟着做)
2、使用thrift生成Java文件
在命令行中进入user.thrift
所在的目录,然后执行thrift -r -gen java user.thrift
.
会发现在当前目录下生成了gen-java
文件夹,将文件夹中的userService
文件copy到项目目录下.
这个文件定义了接口
,入参
,出参
,是客户端和服务器共同使用的一个文件.也是thrift框架很重要的一部分.
namespace java thrift_demo
service UserService {
string getName(1:i32 id)
bool isExist(1:string name)
}
生成的文件:
3、生成的文件的实现类
package server;
import org.apache.thrift.TException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @Author: zongxin
* @Description: thrift生成的java文件的实现类
*/
public class UserServiceImpl implements UserService.Iface {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final static String HUYANSHI = "HUYANSHI";
@Override
public String getName(int id) throws TException {
System.out.println("id :" + id);
return HUYANSHI;
}
@Override
public boolean isExist(String name) throws TException {
System.out.println("receive isExist, name = " + name);
return HUYANSHI.equals(name);
}
}
4、thrift服务端提供与客户端消费
package server;
import org.apache.thrift.TException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @Author: zongxin
* @Description: thrift生成的java文件的实现类
*/
public class UserServiceImpl implements UserService.Iface {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final static String ZONGX = "ZONGX";
@Override
public String getName(int id) throws TException {
System.out.println("id :" + id);
return ZONGX;
}
@Override
public boolean isExist(String name) throws TException {
System.out.println("receive isExist, name = " + name);
return HUYANSHI.equals(name);
}
}
package client;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.*;
import server.UserService;
/**
* @Author: zongxin
* @Description: thrift客户端
*/
public class Client {
private static final String SERVER_IP = "localhost";
private static final int SERVER_PORT = 2345;//Thrift server listening port
private static final int TIMEOUT = 3000;
private void startClient(String userName) {
TTransport transport = null;
try {
transport = new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT);
// 协议要和服务端一致
TProtocol protocol = new TBinaryProtocol(transport);
UserService.Client client = new UserService.Client(protocol);
transport.open();
System.out.println(client.getName(1));
System.out.println(client.isExist("haha"));
} catch (TTransportException e) {
e.printStackTrace();
} catch (TException e) {
e.printStackTrace();
} finally {
if (null != transport) {
transport.close();
}
}
}
public static void main(String[] args) {
Client client = new Client();
client.startClient("Tom");
}
}