Java 杂谈Java技术升华

Thrift(一):快速入门

2018-07-09  本文已影响24人  聪明的奇瑞

什么是 Thrift?

Thrift 安装

Mac系统

  1. 使用 brew 快速安装
brew install thrift

Window 系统

  1. 下载 Thrift.exe:http://www.apache.org/dyn/closer.cgi?path=/thrift/0.11.0/thrift-0.11.0.exe
  2. 将下载的 exe 程序重命名为 thrift.exe,并放入一个文件夹(我这放入 D 盘 Thrift 文件夹下)
  3. 配置环境变量 Path,在最后加上 D:\Thrift;
  4. 执行命令查看是否安装成功
thrift -version

如何使用 IDL 描述接口

struct User{
    1: i32 id
    2: string name
}

service UserService{
    User getUser(1:i32 uid)
}
thrift -r -gen java user.thrift

可用数据类型

Thrift 网络栈

Thrift 网络栈

Transport

Protocol

Processor

Server

Thrift 快速入门

thrift -r -gen java user.thrift
<dependency>
  <groupId>org.apache.thrift</groupId>
  <artifactId>libthrift</artifactId>
  <version>0.11.0</version>
</dependency>
public class UserServiceImpl implements UserService.Iface {
    @Override
    public User getUser(int uid) throws TException {
        User user = new User(uid,"ly");
        return user;
    }
}
public class Server {
    public static void main(String[] args) throws Exception {
        // 业务处理器
        TProcessor processorr = new UserService.Processor<UserService.Iface>(new UserServiceImpl());
        // 设置服务器
        TServerSocket serverSocket = new TServerSocket(8181);
        // 传输协议为二进制
        TBinaryProtocol.Factory protocolFactory = new TBinaryProtocol.Factory();
        // 使用单线程阻塞 I/O 模型
        TServer.Args simpleArgs = new TServer.Args(serverSocket).processor(processorr).protocolFactory(protocolFactory);
        TServer server = new TSimpleServer(simpleArgs);
        System.out.println("开启Thrift服务器,监听端口:8181");
        server.serve();
    }
}
public class Client {
    public static void main(String[] args) throws Exception {
        // 设置调用的服务地址-端口
        TTransport tTransport = new TSocket("localhost", 8181);
        // 使用二进制协议
        TProtocol protocol = new TBinaryProtocol(tTransport);
        // 使用的接口
        UserService.Client client = new UserService.Client(protocol);
        // 打开 Socket
        tTransport.open();
        System.out.println(client.getUser(123));
        tTransport.close();
    }
}
User(id:123, name:ly)
上一篇下一篇

猜你喜欢

热点阅读