使用rpc(facebook thrift)与tomcat 端通信

风之翊 2019-12-29

一、下载 thrift-0.10.0.exe

下载地址:https://www.apache.org/dist/thrift/

二、编写接口

1.基本类型

bool: 布尔类型,占一个字节

byte: 有符号字节

i16:16位有符号整型

i32:32位有符号整型

i64:64位有符号整型

double:64位浮点数

string:字符串

2.容器类型(和Java中的差不多)

List<A>:一系列A类型的元素组成的有序列表,元素可以重复

Set<B>:一些t1类型的元素组成的无序集合,元素唯一不重复

Map<A,B>:键值对对,key唯一

3.结构体

thrift中使用struct 来声明一个结构体,这等同与面向对象语言中的类定义。

struct User{  //声明一个类(在java中称为类)
    1:string userName,
    2:string userPwd,
}

4.异常

异常使用关键字exception来声明

5.服务

使用service关键字来声明

service LoginManger{
    bool loginCheck(1:User user),  //这里可以对上面声明的类进行使用了
    bool register(1:User user),
}

6.类型定义

typedef double mydouble
typedef i32 myi32

  7.名字空间

使用namespace声明,在Java中产生相应的包

编写一个login  service ,将文件命名为Test.thrift

namespace java com.javabull.u.remote.conmunication.entities  //声明在java下的包,当然你可以按照你自己的意愿写

struct User{  //声明一个类(在java中称为类)
    1:string userName,
    2:string userPwd,
}


service LoginManger{
    bool loginCheck(1:User user),  //这里可以对上面声明的类进行使用了
    bool register(1:User user),
}

 使用thrift-0.10.0.exe -gen java Test.thrift生成Java代码

使用rpc(facebook thrift)与tomcat 端通信

   使用rpc(facebook thrift)与tomcat 端通信

在这里,命令行报错,是由于参数要定义顺序,所以加上顺序就可以了

   使用rpc(facebook thrift)与tomcat 端通信

使用rpc(facebook thrift)与tomcat 端通信

使用rpc(facebook thrift)与tomcat 端通信

最后生成的Java代码

      使用rpc(facebook thrift)与tomcat 端通信

使用rpc(facebook thrift)与tomcat 端通信

三、服务器端的接口的实现

  类实现LoginManger.Iface即可。  
服务端使用maven引入thrift
<dependencies>
<!--        引入thrift依赖-->
        <dependency>
            <groupId>org.apache.thrift</groupId>
            <artifactId>libthrift</artifactId>
            <version>0.10.0</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>

    </dependencies>
    四、服务器端的使用  编写Servlet,继承自TServlet
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServlet;

import com.javabull.u.remote.conmunication.LoginManager;
import com.javabull.u.remote.conmunication.LoginManagerImpl;

public class RemoteServlet extends TServlet{

    private static final long serialVersionUID = 1L;

    public RemoteServlet() {//LoginManagerImpl是对LoginManger.Iface的实现
12 super(new LoginManager.Processor<>(new LoginManagerImpl()), new TBinaryProtocol.Factory());  }  }

五、Android端的引用

//引入thrift依赖
    implementation ‘org.apache.thrift:libthrift:0.12.0‘
    implementation ‘org.glassfish.main:javax.annotation:4.0-b33‘

发现报错,在build.gradle加入packagingOptions即可

 使用rpc(facebook thrift)与tomcat 端通信

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "com.javabull.android_thrift"
        minSdkVersion 15
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt‘), ‘proguard-rules.pro‘
        }
    }

//加入packagingOptions即可
    packagingOptions {
        exclude ‘META-INF/DEPENDENCIES‘
        exclude ‘META-INF/NOTICE‘
        exclude ‘META-INF/LICENSE‘
        exclude ‘META-INF/LICENSE.txt‘
        exclude ‘META-INF/NOTICE.txt‘
    }

}

   

THttpClient httpClient = new THttpClient("http://localhost:8080/server.do"); //访问Tomcat中Servlet
        TProtocol protocol = new TBinaryProtocol(httpClient);
        LoginManager.Client client = new InterManager.Client(protocol);
          //之后可以通过client调用之前编写好的接口

  ok,大功告成

相关推荐