thrift的简单使用

写在前面

本文一起看下一种由facebook出品的rpc框架thrift。

源码 。

1:开发步骤

1:编写thrift idl文件
2:根据thrift idl文件生成java模板代码
3:继承模板代码的*.Iface接口给出server的具体服务实现
4:使用模板的HelloWorldService.Processor编写server端
5:使用HelloWorldService.Client编写服务端调用程序

2:实战

  • 准备编译生成器
    这里 。

  • idea准备插件
    thrift的简单使用_第1张图片

无该步骤也可以

  • 编写idl
    hello.thrift:
service HelloWorldService {
  string say(1: string username)
}
  • 通过生成器生成模板文件
$ ./thrift-0.19.0.exe -gen java hello.thrift

thrift的简单使用_第2张图片

生成的模板Java文件很长,主要关注如下几个类即可:

Iface:服务端通过实现此接口提供同步服务
AsyncIface:服务端通过实现此接口提供异步服务
Client:客户端通过此类的实例对象以同步的方式访问服务端
AysyncClient:客户端通过此类的是实例以异步的方式访问服务端

将生成的代码拷贝到项目,备用。

  • pom
<dependency>
    <groupId>org.apache.thriftgroupId>
    <artifactId>libthriftartifactId>
    <version>0.19.0version>
dependency>
  • service实现类
public class HelloWorldServiceImpl implements HelloWorldService.Iface {
    @Override
    public String say(String username) throws TException {
        return "Hello " + username;
    }
}
  • server类
public class SimpleServer {
    public static void main(String[] args) throws Exception {
        ServerSocket serverSocket = new ServerSocket(ServerConfig.SERVER_PORT);
        TServerSocket serverTransport = new TServerSocket(serverSocket);
        HelloWorldService.Processor processor =
                new HelloWorldService.Processor<HelloWorldService.Iface>(new HelloWorldServiceImpl());

        TBinaryProtocol.Factory protocolFactory = new TBinaryProtocol.Factory();
        TSimpleServer.Args tArgs = new TSimpleServer.Args(serverTransport);
        tArgs.processor(processor);
        tArgs.protocolFactory(protocolFactory);

        // 简单的单线程服务模型 一般用于测试
        TServer tServer = new TSimpleServer(tArgs);
        System.out.println("Running Simple Server");
        tServer.serve();
    }
}

启动。

  • client类
public class SimpleClient {
    public static void main(String[] args) {
        TTransport transport = null;
        try {
            transport = new TSocket(ServerConfig.SERVER_IP, ServerConfig.SERVER_PORT, ServerConfig.TIMEOUT);
            TProtocol protocol = new TBinaryProtocol(transport);
            HelloWorldService.Client client = new HelloWorldService.Client(protocol);
            transport.open();

            String result = client.say("Leo");
            System.out.println("Result =: " + result);
        } catch (TException e) {
            e.printStackTrace();
        } finally {
            if (null != transport) {
                transport.close();
            }
        }
    }
}

运行:

Result =: Hello Leo

Process finished with exit code 0

酱!!!

写在后面

参考文章列表

Apache Thrift系列详解(一) - 概述与入门 。

你可能感兴趣的:(杂,java,开发语言)