java gradle 项目 在idea上 搭建一个简单的thrift实例

前言

Thrift是RPC通信的一种方式,可以通过跨语言进行通信,最近项目需要进行跨语言的通信,因此首先尝试搭建了一个简单的thrift框架,因为网上的实例大都参差不全,通过gpt查询得到的结果对我帮助更大一点,但是也不够仔细,因此做此总结,希望给需要的人帮助。

正文

1 创建一个gradle项目

首先我们需要创建一个gradle项目,如果你是在当前项目的基础上也可以不做创建哦。

2 添加依赖

找到根目录的bulid.gradle 文件添加依赖

java 复制代码
ependencies {
    implementation 'org.apache.thrift:libthrift:0.15.0'
}

之后idea会提示你导入依赖,或者收到更新一下依赖就可以生成thrift对应的依赖。

3创建一个简单的demo

  1. 创建 .thrift文件

    创建一个文件夹比如命名为thrift,在文件下创建一个.thrift文件,用于生成对应语言的代码。

    比如我创建了一个login.thrift 文件,添加两个方法,一个有返回值,一个没有返回值。

    创建的文件↓:

    文件内容↓:

  2. 通过命令生成对应的java接口代码

    这是thrift的一套机制,因为thrift是跨语言的,所以你要生成你的接口对应语言的service。

    在你刚才创建的 .thrift文件所在的路径下执行命令。

    找到你的 .thrift文件,右键,open in terminal,执行命令

java 复制代码
thrift --gen java loginService.thrift
其中 xx.thrift 就是你刚才创建的文件

() 如果你发现,这个命令没办法执行,那你需要先执行这个命令哦:(亲测有效)

java 复制代码
sudo zypper install thrift

他就会自动生成文件夹和文件↓

  1. 写一个实现类,实现刚才生成的接口

    针对你需要的功能,写一个实现类,比如我写一个loginServiceImpl,实现刚才生成的接口类。

    到现在为止,我们已经完成了大部分,之后我们就开始写一个服务端和一个客户端去测试了。thrfit需要创建一个server端和一个client端,用于我们发送通信和接收通信。

  2. 写服务端

    创建一个thriftServer,类你可以随意命名。举例↓

java 复制代码
package com.gehc.surgery.thrift.Server;
import com.gehc.surgery.thrift.loginServiceImpl;
import com.gehc.surgery.thrift.loginService;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket;

public class ThriftServer {
    public static  void main(String[] args){
        try {
            //刚才自己创建的实现类
            loginServiceImpl login =new loginServiceImpl();
            TServerSocket serverSocket =new TServerSocket(9090);
            loginService.Processor<loginServiceImpl> processor =new loginService.Processor<>(login);
            TServer.Args serverArg =new TServer.Args(serverSocket);
            serverArg.processor(processor);
            TSimpleServer server =new TSimpleServer(serverArg);
            server.serve();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
  1. 写一个客户端
    创建一个thriftClient类,类名你可以自己命名,写法如下↓:
java 复制代码
package com.gehc.surgery.thrift.Client;

import com.gehc.surgery.thrift.loginService;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;

public class ThriftClient {
    public  static void main(String[] args) throws TException {
    		//自己定一下ip和端口 我随意定义的
            TTransport transport= new TSocket("localhost",9090);
            transport.open();
            TBinaryProtocol protocol=new TBinaryProtocol(transport);
            loginService.Client client=new loginService.Client(protocol);
            //你的实现类的方法
            client.login();
            boolean result= client.login1();
            System.out.println(result);
            transport.close();
    }
}
  1. 测试
    先启动一下服务端,然后再启动一下客户端,我的login1()方法是有返回值的,当启动了客户端,就可以在服务端的执行日志那里看到我的相关返回值啦
相关推荐
蚰蜒螟42 分钟前
深入解析JVM字节码解释器执行流程(OpenJDK 17源码实现)
开发语言·jvm·python
keke101 小时前
Java【14_2】接口(Comparable和Comparator)、内部类
java·开发语言
思茂信息1 小时前
CST软件对OPERA&CST软件联合仿真汽车无线充电站对人体的影响
c语言·开发语言·人工智能·matlab·汽车·软件构建
CN.LG1 小时前
Java 乘号来重复字符串的功能
java·开发语言
川川菜鸟1 小时前
2025长三角数学建模C题完整思路
c语言·开发语言·数学建模
萌新下岸多多关照1 小时前
Java中synchronized 关键字
java·开发语言
中国lanwp1 小时前
使用Maven部署WebLogic应用
java·maven
醍醐三叶1 小时前
C++文件操作--2 二进制文件操作
开发语言·c++
剽悍一小兔1 小时前
linux,我启动一个springboot项目, 用java -jar xxx.jar & ,但是没多久这个java进程就会自动关掉
开发语言
li星野1 小时前
C++:C++内存管理
开发语言·c++