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

news2025/1/24 5:25:56

前言

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

正文

1 创建一个gradle项目

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

2 添加依赖

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

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,执行命令

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

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

sudo zypper install thrift

他就会自动生成文件夹和文件↓
在这里插入图片描述

  1. 写一个实现类,实现刚才生成的接口
    针对你需要的功能,写一个实现类,比如我写一个loginServiceImpl,实现刚才生成的接口类。
    在这里插入图片描述
    到现在为止,我们已经完成了大部分,之后我们就开始写一个服务端和一个客户端去测试了。thrfit需要创建一个server端和一个client端,用于我们发送通信和接收通信。

  2. 写服务端
    创建一个thriftServer,类你可以随意命名。举例↓

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类,类名你可以自己命名,写法如下↓:
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()方法是有返回值的,当启动了客户端,就可以在服务端的执行日志那里看到我的相关返回值啦
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/924557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四信5G智慧交通方案

5G是第五代移动通信技术的简称&#xff0c;是具有高速率低时延和大连接特点的新一代宽带移动通信技术&#xff0c;是实现智慧交通中的“车、路、人、环境”等交通要素互联互通的网络基础设施。相比以往的移动通信网络&#xff0c;5G网络以一种灵活部署的架构提供10Gbps以上的带…

实现遮挡层

css实现遮挡层 position: fixed;left: 0;top: 0;bottom: 0;right: 0;opacity: 0.5;background-color: gray;<div class"mask"></div>vue3 teleport 实现 <template><div class"box"><p>这里是box</p><div class&…

车载毫米波雷达的上车安装与标定问题

说明 雷达的上车安装和标定问题在产品开发流程中应该算比较后期的工作了(我的理解应该至少是C样乃至SOP阶段)。当然&#xff0c;如果该雷达在研发的初期就有车型对接并有需求方给的很具体的SOR&#xff0c;那这部分的工作在结构设计和算法开发阶段就可以开展。 上车安装和标定是…

07-Numpy基础-伪随机数生成

numpy.random模块对Python内置的random进行了补充&#xff0c;增加了一些用于高效生成多种概率分布的样本值的函数。 例如&#xff0c;你可以用normal来得到一个标准正态分布的44样本数组&#xff1a; 而Python内置的random模块则只能一次生成一个样本值。从下面的测试结果中可…

Docker consul的容器服务注册与发现

前言一、服务注册与发现二、consul 介绍三、consul 部署3.1 consul服务器3.1.1 建立 Consul 服务3.1.2 查看集群信息3.1.3 通过 http api 获取集群信息 3.2 registrator服务器3.2.1 安装 Gliderlabs/Registrator3.2.2 测试服务发现功能是否正常3.2.3 验证 http 和 nginx 服务是…

【视频】Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析|数据分享...

全文下载链接&#xff1a;http://tecdat.cn/?p23544 在本文中&#xff0c;长短期记忆网络——通常称为“LSTM”——是一种特殊的RNN递归神经网络&#xff0c;能够学习长期依赖关系&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 本文使用降雨量数据&#xf…

C++,运算符重载——关系运算符练习

一、关系运算符重载 > > < < ! #include <iostream> using namespace std;class Relates { private:int a;int b; public:Relates() {}Relates(int a,int b):a(a),b(b) {}bool operator>(const Relates &R) const{if((a>R.a&&b>R.b) …

Docker搭建elasticsearch+kibana测试

最近需要做大数据画像&#xff0c;所以先简单搭建一个eskibana学习使用&#xff0c;记录一下搭建过程和遇到的问题以及解决办法 1.拉取es和kibana镜像 在拉取镜像之前先搜索一下 elasticsearch发现是存在elasticsearch镜像的&#xff0c;我一般习惯性拉取最新镜像&#xff0c…

hive中的DDL操作以及数据的导入导出

文章目录 DDL库操作表操作内部表&外部表分区表修改表&删除表 数据的导入导出数据导入数据导出 DDL DDL(data definition language)&#xff0c;命令有CREATE、ALTER、DROP等。主要用在定义、修改数据库对象的结构或数据类型&#xff1b; 理解 库操作 创建 语法 CRE…

在VS中使用格式化工具

在VS中使用格式化工具 官网地址: https://clang.llvm.org/ 最后更新时间&#xff1a;2023.8.25 这里以windows为例&#xff0c;使用的环境为VS。 &#xff08;一&#xff09;下载安装LLVM 下载地址: https://github.com/llvm安装&#xff08;自己选择安装路径&#xff09; &…

浅谈Java中的观察者模式

观察者模式是软件开发中常用的一种设计模式&#xff0c;它通过定义一对多的依赖关系&#xff0c;使得一个对象&#xff08;主题&#xff09;的状态变化可以通知多个其他对象&#xff08;观察者&#xff09;。 这种模式的优点是解耦和增加扩展性&#xff0c;用于实现对象之间的…

mac清理磁盘空间软件有哪些 mac清理磁盘空间怎么清理

随着时间的推移&#xff0c;Mac电脑上的文件会越来越多&#xff0c;很快就会占满磁盘空间。这时候&#xff0c;我们需要一个好的Mac清理磁盘空间软件来释放空间&#xff0c;保持电脑的良好性能。那么&#xff0c;mac清理磁盘空间软件有哪些呢&#xff1f;接下来&#xff0c;我将…

7.Oracle视图创建与使用

1、视图的创建与使用 在所有进行的SQL语句之中&#xff0c;查询是最复杂的操作&#xff0c;而且查询还和具体的开发要求有关&#xff0c;那么在开发过程之中&#xff0c;程序员完成的并不是是和数据库的所有内容&#xff0c;而更多的是应该考虑到程序的设计结构。可以没有一个项…

python 模块BeautifulSoup 从HTML或XML文件中提取数据

一、安装 Beautiful Soup 是一个HTML/XML的解析器&#xff0c;主要的功能也是如何解析和提取 HTML/XML 数据。 lxml 只会局部遍历&#xff0c;而Beautiful Soup 是基于HTML DOM的&#xff0c;会载入整个文档&#xff0c;解析整个DOM树&#xff0c;因此时间和内存开销都会大很多…

spring boot 项目整合 websocket

1.业务背景 负责的项目有一个搜索功能&#xff0c;搜索的范围几乎是全表扫&#xff0c;且数据源类型贼多。目前对搜索的数据量量级未知&#xff0c;但肯定不会太少&#xff0c;不仅需要搜索还得点击下载文件。 关于搜索这块类型 众多&#xff0c;未了避免有个别极大数据源影响整…

阿里云X森马 AIGC T恤设计大赛;SD新手入门完全指南;揭秘LLM训练中的数学;LLM高质量阅读清单 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 阿里云X森马 | AIGC T 恤设计大赛&#xff0c;函数计算玩转 Stable Diffusion 比赛官网&#xff1a;https://developer.aliyun.com/ad…

火山引擎云调度GTM“同城容灾”与“异地多活”实践

随着企业不断推进数字化进程&#xff0c;高并发业务和海量数据的挑战也随之而来。在现实生活中&#xff0c;除了地震、台风、挖光纤这种小概率事件&#xff0c;还有很多人为造成的高概率数据丢失事件&#xff0c;比如人为操作失误、硬件故障、网络攻击等等&#xff0c;故障容灾…

RISC-V中国峰会 | 256核服务器高调亮相,谁与争锋?

8月23日&#xff0c;第三届RISC-V中国峰会&#xff08;RISC-V Summit China 2023&#xff09;在北京香格里拉饭店正式开幕&#xff0c;来自世界各地的行业精英汇聚一堂&#xff0c;为RISC-V生态系统建言献策&#xff0c;凝心聚力&#xff01; 中国工程院院士倪光南、RISC-V国际…

C++多线程编程——thread线程创建与使用(2W字保姆级介绍)

目录 前言 线程创建 标准库thread&#xff08;同步线程的创建过程&#xff09; 启动线程&#xff1a;实例thread 线程执行单元&#xff08;可调用对象&#xff09; 线程等待 线程传参 线程id 成员方法获取线程id 命名空间获取线程id 让出线程资源 sleep_for() sle…

聊一聊微前端框架的选型和实现 | 业务平台

一、项目背景 目前&#xff0c;我们开发维护的项目主要有 6 个&#xff0c;但是分别对应 PC 和 H5 两个端&#xff1a; 如上图所示&#xff0c;我们 6个项目最开始是一个一个进行开发维护的&#xff0c;但是到后期&#xff0c;这几个项目之间有的部分会有业务逻辑不同&#xff…