RPC远程调用及常用框架之Thrift

RPC远程调用及常用框架之Thrift

    • 说明
    • 安装Thrift
    • 接下来大体上就这几步
    • 启动服务端
    • 启动客户端

说明

上一篇RPC远程调用及常用框架之Hessian,介绍了几种常用RPC调用框架,今天继续来看看Thrift使用

安装Thrift

很简单去官网下载thrift,这里只需下载 (thrift-x.x.x.exe),然后将名字改成 thrift.exe,放入一个名叫Thrift的文件夹,然后在环境变量加入这个路径比如(D:\chenxuyuan\Thtift)安装就算成功了

接下来大体上就这几步

第1步: 写.thrift文件,也就是接口描述文件(Interface Description File);

namespace java com.hans.thriftserver
service Hello{
    string helloString(1:string param)
}

第2步: thrift.exe),生成目标语言代码;

thrift -r -gen java hello.thrift

第3步: 服务器端程序引入thrift生成的代码,实现RPC业务代码。
这里将接口代码放入父工程这样服务端和客户端就都可以共用了

    
        thrift
        com.example
        0.0.1-SNAPSHOT
    
    ###实现
    public class HelloServiceImpl implements Hello.Iface {

    @Override
    public String helloString(String param) throws TException {
        return "hello: " + param;
    }
}
服务端暴露服务

@SpringBootApplication
public class ThriftServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ThriftServerApplication.class, args);

        try {
            System.out.println("服务端开启....");
            TProcessor tprocessor = new Hello.Processor(new HelloServiceImpl());
            // 简单的单线程服务模型
            TServerSocket serverTransport = new TServerSocket(9898);
            TServer.Args tArgs = new TServer.Args(serverTransport);
            tArgs.processor(tprocessor);
            tArgs.protocolFactory(new TBinaryProtocol.Factory());
            TServer server = new TSimpleServer(tArgs);
            server.serve();
        } catch (TTransportException e) {
            e.printStackTrace();
        }
    }
}

第4步: 客户端引入代码,调用远程服务。

    
        thrift
        com.example
        0.0.1-SNAPSHOT
    
##客户端调用
@SpringBootApplication
public class ThriftClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(ThriftClientApplication.class, args);

        System.out.println("客户端启动....");
        TTransport transport = null;
        try {
            transport = new TSocket("localhost", 9898, 30000);
            // 协议要和服务端一致
            TProtocol protocol = new TBinaryProtocol(transport);
            Hello.Client client = new Hello.Client(protocol);
            transport.open();
            String result = client.helloString("hans");
            System.out.println(result);
        } catch (TTransportException e) {
            e.printStackTrace();
        } catch (TException e) {
            e.printStackTrace();
        } finally {
            if (null != transport) {
                transport.close();
            }
        }
    }
}

启动服务端

服务端开启…

启动客户端

客户端启动…
hello: hans

你可能感兴趣的:(RPC远程调用及常用框架之Thrift)