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()方法是有返回值的,当启动了客户端,就可以在服务端的执行日志那里看到我的相关返回值啦
相关推荐
m51273 分钟前
LinuxC语言
java·服务器·前端
IU宝7 分钟前
C/C++内存管理
java·c语言·c++
湫ccc7 分钟前
《Python基础》之pip换国内镜像源
开发语言·python·pip
瓜牛_gn8 分钟前
依赖注入注解
java·后端·spring
fhvyxyci8 分钟前
【C++之STL】摸清 string 的模拟实现(下)
开发语言·c++·string
hakesashou9 分钟前
Python中常用的函数介绍
java·网络·python
qq_4597300310 分钟前
C 语言面向对象
c语言·开发语言
佚先森18 分钟前
2024ARM网络验证 支持一键云注入引流弹窗注册机 一键脱壳APP加固搭建程序源码及教程
java·html
菜鸟学Python20 分钟前
Python 数据分析核心库大全!
开发语言·python·数据挖掘·数据分析
一个小坑货27 分钟前
Cargo Rust 的包管理器
开发语言·后端·rust