使用thrift心得:

(1)thrift是一个RPC的框架  ,RPC是远程过程调用协议;用于进行可扩展且跨语言的服务的开发,以构建在C++、Java、Python、PHP、Ruby、Erlang、

  Perl、Haskell、C#、Cocoa、JavaScript、Node.js、Smalltalk、and OCaml这些编程语言的服务,thrift实际上是实现了C/S模式,通过代码生成工具将接口定

  义文件生成服务器端和客户端代码(可以为不同语言),从而实现服务端和客户端跨语言的支持。用户在thrift描述文件中声明自己的服务,这些服务经过编译后会

  生成相应语言的代码文件,然后用户实现服务(客户端调用服务,服务器端提供服务)便可以了。其中protocol(协议层,定义数据传输格式,可以为二进制或者XML等)

  和transport(传输层,定义数据传输方式,可以为TCP/IP传输,内存共享或者文件共享等)被用作运行时库

(2)thrift类似于一个脚本编译软件用来编译thrift脚本转成相应的Java文件,用于共同约束客户端和服务端关于 参数、接口、异常等数据的使用,像一个中间件一样;

(3)服务端需要设置端口号,需要实例脚本的service 【类似于接口】后映射相对应的具体实现类,具体实现类需要继承写该service并重写该service接口的方法;

(4)客户端需要输入服务端IP地址和端口号连接,连接成功后需要实例service,并设置参数,这些都需要thrift脚本转成相应的Java文件的约束,具体使用则直接调用即可,

  语法的使用需要配合thrift依赖的方法使用;

(5)客户端使用结束后,记得关闭连接。

Thrift框架-具体使用

 

 

2.

需要提前编译thrift脚本,window系统可在文件夹新建一个后缀是 .thrift 的文件  ,我这里命名为 login.thrift

内容:

namespace java cn.cen.thrift

struct MyRequest{
    1: string username;
    2: string psw;
}

exception MyRequestException{
    1: required i32 code;
    2: optional string reason;
}

//服务名
service MyLoginService{
    string doLogin(1: MyRequest myRequest) throws (1:MyRequestException mrqe);//可能抛出异常
}

解释:

(1)namespace java cn.cen.thrift  的意思是说 【命名空间】【编译语言】【文件夹路径】

(2)struct 是块的意思  ,相当于poji类的使用

(3)exception 是异常类型  , required 是指必须有的参数  ,optional 是可选参数,可有可无

(4)service 是服务类型   ,类似于接口 的使用  ,里面是方法    ,string doLogin 意思是方法doLogin  返回string 类型数据  ,括号的是参数  

(5)所有的参数 都需要写序号

3.

cmd打开指令框,进入有login.thrift这个文件的文件夹,后执行thrift编译指令

 

 

 

Thrift框架-具体使用

注意,thrift-0.9.3 是exe文件的名字,是可变的,很具实际输入    -gen java  意思是编译成java语言  ,后面的是文件名

编译后会在同文件夹生成一个gen-java文件夹  ,根据命名空间的参数一层层建立文件夹,里面会生成多个java文件

Thrift框架-具体使用

 

 

 Thrift框架-具体使用

 

 

 4.

新建一个maven项目,

pom.xml引入依赖包

   
<!--    thrift依赖包 ,这个不可缺-->
 <dependency>
      <groupId>org.apache.thrift</groupId>
      <artifactId>libthrift</artifactId>
      <version>0.9.3</version>
    </dependency>

<!--    下面两个日志依赖包,可有可无,虽然不影响thrift,
但是最好有,不然会有警告提示-->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.21</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-nop</artifactId>
      <version>1.7.21</version>
    </dependency>

5.

项目结构

Thrift框架-具体使用

 

 

 6.

建立 具体实现类

package doThrift;

import org.apache.thrift.TException;
import thrift.MyLoginService;
import thrift.MyRequest;
import thrift.MyRequestException;

import java.util.ArrayList;

/**
 * 具体实现类
 */
public class LoginServiceImpl implements MyLoginService.Iface {
    @Override
    public String doLogin(MyRequest myRequest) throws MyRequestException, TException {
        System.out.println("设施具体方法位置");
        System.out.println(myRequest.getUsername());
        System.out.println(myRequest.getPsw());
        return  myRequest.getUsername() + myRequest.getPsw();
    }
}
View Code

相关文章: