【thrift】 thrift入门

【thrift】 thrift入门


thrift 是Facebook开源的跨语言的RPC通信框架,支持的语言比较多,如java、c++、Python等
thrift提供的跨语言的编译工具,可以基于thrift idl语言编译出所支持语言的源代码文件
利用thrift,可以方便的开发出服务间的RPC通信框架,促进服务间的解耦

第一部分:thrift 入门

1.idl 文件 ,下面的说明均基于java语言
namespace   java com.ming.thrift.demo

service HelloService{
string helloWorld(1:string hello);
}
比较简单,就定义了一个Service和一个接口

比如生成java代码,则执行 thrift --gen java  demo.thrift

2.实现Service接口

编译thrift idl生成的java代码是为 HelloService.java
里面包含了一个  Iface  的 interface

我们只需要实现这个 iface 接口即可,这里只有 helloWorld 这个方法
public   class   HelloServiceImpl   implements   HelloService.Iface {

       public   String helloWorld (String hello)   throws   TException {
            
            System.   out .println(   "hello world " +hello);
            
               return   "I'm server, hello" ;
      }

}

3.编写server端
public   class   HelloServer {

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

               /*
             * thrift 封装的 socket 层,使用端口7911构建一个非阻塞的socket
             */
        TNonblockingServerTransport serverTransport =   new   TNonblockingServerSocket(7911);

          /*
         * thrift 协议层,这里使用的是 二进制协议
         */
        Factory proFactory =   new   TBinaryProtocol.Factory();

          /*
         * thrift idl接口的实现类
         */
        HelloServiceImpl testimpl =   new   HelloServiceImpl();
       
          /*
         * thrift Processor 业务逻辑处理层
         */
        TProcessor processor =   new   HelloService.Processor<HelloServiceImpl>(testimpl);

        Args rpcArgs =   new   Args(serverTransport);

        rpcArgs.processor(processor);

        rpcArgs.protocolFactory(proFactory);

          /*
         * thrift server
         */
        TServer server =   new   THsHaServer(rpcArgs);

        System.   out .println(   "server begin..." );
       
        server.serve();

      }
}
thrift 服务端包含4个部分
transport层:经过封装的socket层
protocol层:网络读写的协议层,主要考虑的是数据的编解码与序列化反序列化等,为Processor提供输入输出流对象
Processor层:Processor封装了从输入流读数据及写数据到输出流的能力
server层:相当于一个组装员,把transport、protocol、Processor三者组装起来称为一个整体,对外提供服务
          同时,其自身包含了服务端的业务处理框架,如线程池模型等

4.编写client端
public   class   HelloClient {

       public   static   void   main(String[] args)   throws   TException, InterruptedException {

               /*
              * 构建socket
              */
             TTransport transport =   new   TFramedTransport(   new   TSocket( "localhost" , 7911));
               /*
              * 链接到server
              */
             transport.open();

               /*
              * 创建读写协议对象
              */
         TProtocol protocol =   new   TBinaryProtocol(transport);

           /*
          * 这里的client 为thrift 编译生成的代码 HelloService 里client类
          */
         Client client =   new   Client(protocol);
        
           /*
          * 调用 方法 helloWorld  整个 RPC调用过程由thrift处理,feel so easy
          */
         String res = client.helloWorld(   "I'm client" );

         System.   out .println(res);
      }
}
client的编写也比较简单,与传统的 socket 通信代码的编写没有太多的差异

thrift基本上把通信的细节已经封装好
不管是server还是client ,要进行网络通信,依然还是创建连接,从输入流读数据,写数据到输出流
通信的原理及流程都是一致的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值