当前位置: 首页 > news >正文

Thrift快速入门开发demo

Thrift快速入门开发demo

一、认识Thrift

thrift是什么?一个RPC 代码生成框架,使用它的IDL(Interface Defination Language,接口定义语言)定义你想要实现的接口,然后它就会生成对应语言的远程调用框架代码,用户只需要实现接口逻辑,不用关心具体的细节。

tutorial:http://digital-madness.in/blog/wp-content/uploads/2012/11/BSD_08_2013.8-18.pdf

二、快速入门开发一个Demo

2.1 开发逻辑

  1. 编写IDL文件
  2. 使用IDL文件生成对应Java代码
  3. 拷贝Java代码到对应项目目录
  4. 实现接口逻辑
  5. 编写server端
  6. 编写client端

thrift --gen java /users/ccl/workspace/demo

2.2 编写IDL文件

Thrift具体语法参考官方文档Thrift interface description language

  • data.thrift
namespace java thrift.gentypedef i16 short
typedef i32 int
typedef i64 long
typedef bool boolean
typedef string Stringstruct Person{1: optional String username;2: optional int age;3: optional boolean marriage;
}exception DataException{1: optional String massage;2: optional String callback;3: optional String date;
}service PersonService{Person getPersonByUsername(1: required String username) throws(1: DataException dataException);void savePerson(1:required Person person) throws(1: DataException dataException);}

以下逐行解释:

namespace java thrift.gen

namespace定义命名空间,是一个关键字。生成的java代码会放在thrift.gen包目录下。

typedef i16 short
typedef i32 int
typedef i64 long
typedef bool boolean
typedef string String

IDL语言定义了一系列通用的基本数据类型,对应多种语言的数据类型。这里使用typedef关键字显示地为idl和java中的数据类型做一个别名替换,方便后续代码编写。

struct Person{1: optional String username;2: optional int age;3: optional boolean marriage;
}

struct结构体对应java中的class。这里我们定义了一个Person类。IDL规定定义数据要包含类似 1:的位置提示符。optional表示可选的,这里无多大意义。

exception DataException{1: optional String massage;2: optional String callback;3: optional String date;
}

exception关键字定义了异常类型,用法和struct一致,只是关键字名称改变。

service PersonService{Person getPersonByUsername(1: required String username) throws(1: DataException dataException);void savePerson(1:required Person person) throws(1: DataException dataException);
}

service关键字定义了一个服务。生成的java代码也是一个类,类中定义了两个方法。我们需要实现这两个方法的接口。

2.3 生成java代码

两种方法:

  • 自己安装thrift然后运行命令 thrift --gen java gen-java
    • 生成的代码就会放在gen-java目录下
  • 在线thrift编译平台
    • 版本号要与jar包一致

不出意外,会生成

  • DataException.java
  • Person.java
  • PesonService.java

三个文件,放在package thrift.gen下。这三个类都封装好许多底层代码。

2.4 实现接口逻辑

现在,我们需要自己实现PersonService类中的两个方法。

在pom.xml下引入maven依赖

<dependency><groupId>org.apache.thrift</groupId><artifactId>libthrift</artifactId><version>0.9.3</version>
</dependency>

版本号根据安装的thrift决定。

  • PersonServiceImpl.java
import org.apache.thrift.

相关文章:

Thrift快速入门开发demo

Thrift快速入门开发demo 一、认识Thrift thrift是什么?一个RPC 代码生成框架,使用它的IDL(Interface Defination Language,接口定义语言)定义你想要实现的接口,然后它就会生成对应语言的远程调用框架代码,用户只需要实现接口逻辑,不用关心具体的细节。 tutorial:htt…...

关于C++智能指针复习总结

RAII(Resource Acquisition Is Initialization): 资源获得即初始化 利用对象生命周期来控制程序的资源(将资源交给对象处理) 智能指针利用了该思想 将资源交给一个对象, 初始化资源(可以是指针或者等等资源), 释放交给析构函数 因为析构函数无论是什么场景, 对象销毁时一定会…...

Prometheus Operator创建告警规则并接入钉钉报警

prometheus之钉钉报警 前言1. 添加prometheus报警规则1.2 添加自定义报警规则文件 2. 配置钉钉报警2.2 部署dingding插件 3. 编写alertmanager配置文件 前言 在kubenetes上安装了kube-promethues&#xff08;包含Prometheus Operator&#xff09;,程序正常跑起来了&#xff0c…...

Word整理论文参考文献

1.安装Zotero软件 2.安装Zotero的Chrome网站插件&#xff0c;并将插件固定到浏览器 3.安装Word的Zotero插件 4.在DBLP网站https://dblp.org/search 搜索需要添加的参考文献->点击BibTex->点击网页右上角的Zotero符号&#xff08;即第二步所指的符号&#xff09;->至…...

计算机网路概述

目录 计算机网络的概念 计算机网络的定义&#xff1a; 计算机网络的组成&#xff1a; 终端系统/资源子网 通信子网 计算机网络的类型 按照拓扑分类​编辑 按照范国分类&#xff1a; 按传输方式进行分类 计算机网络体系结构 传输方式 按照传输方向区分 按照传输对象…...

832. 翻转图像 - 力扣

1. 题目 给定一个 n x n 的二进制矩阵 image &#xff0c;先 水平 翻转图像&#xff0c;然后 反转 图像并返回 结果 。 水平翻转图片就是将图片的每一行都进行翻转&#xff0c;即逆序。 例如&#xff0c;水平翻转 [1,1,0] 的结果是 [0,1,1]。 反转图片的意思是图片中的 0 全部被…...

mumu 模拟器安装

1.下载安装 下载地址 Win 历史版本&#xff1a;http://mumu.163.com/update/win/Mac 历史 版本&#xff1a;http://mumu.163.com/20200515/25905_880858.html 2.设置为竖屏 在设置中心--界面设置页面设置宽720&#xff0c;高1280&#xff0c;DPI为240&#xff0c;如下图所示。…...

opencv实现图片的膨胀腐蚀

opencv实现图片的膨胀腐蚀 在OpenCV中&#xff0c;膨胀和腐蚀是两种基本的图像处理操作&#xff0c;通常用于二值图像中以提取特定的特征。它们是基于图像的形态学操作&#xff0c;使用一个称为结构元素或核的模板来改变图像的形状。 下面是如何使用OpenCV实现图片的膨胀和腐…...

[AIGC] Java常用的JSON库及简单示例

Java常用的JSON库及简单示例 在Java的世界里&#xff0c;JSON库广泛用于日常开发工作&#xff0c;本文将介绍几个常用的JSON库并配以简单的示例代码。 1. Gson Gson是Google提供的一个用来在Java对象和JSON数据之间进行转换的Java库。 它有一定的学习曲线&#xff0c;但一旦熟…...

Linux shell编程学习笔记50:who命令

0 前言 2024年的网络安全检查又开始了&#xff0c;对于使用基于Linux的国产电脑&#xff0c;我们可以编写一个脚本来收集系统的有关信息。比如&#xff0c;我们可以使用who命令来收集当前已登陆系统的用户信息&#xff0c;当前运行级别等信息。 1. who命令 的功能、格式和选项…...

vue使用webscoket

1. 创建 WebSocket 连接 首先&#xff0c;你需要在你的 Vue 组件中创建一个 WebSocket 连接。通常&#xff0c;这会在组件的 created 或 mounted 生命周期钩子中完成。 created() {this.socket new WebSocket(wss://your-websocket-url);this.socket.onopen () > {conso…...

第18章-综合以上功能 基于stm32的智能小车(远程控制、避障、循迹) 基于stm32f103c8t6/HAL库/CubeMX/超详细,包含代码讲解和原理图

这个是全网最详细的STM32项目教学视频。 第一篇在这里: 视频在这里 STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式学习 PID控制算法 编码器电机 跟随 第18章-综合以上功能 18-按键和app按钮切换功能 根据上面介绍&#xff0c;我们的模式可…...

java并发工具类都有哪些

Java中的并发工具类包括&#xff1a; CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成某些操作。它通常用于线程间的同步&#xff0c;例如在一个线程完成其工作后通知其他线程继续执行。 CyclicBarrier CyclicBarrier是一个同步辅助类&#xff0c;它允许一…...

偏微分方程算法之抛物型方程差分格式编程示例一

目录 一、研究问题 二、C++代码 三、结果分析 一、研究问题 从本节开始将对具体的抛物型偏微分问题算例进行C++编程,以加深对抛物型偏微分方程差分格式构造的理解和应用。 采用向前欧拉格式计算抛物型方程初边值问题:...

数据结构—栈(C语言实现)

文章目录 前言一、栈的概念二、栈的代码实现Stack.hStack.c 三、使用栈解决有效的括号问题总结 前言 小伙伴们&#xff0c;大家好哇&#xff01;&#xff01;欢迎来到我的博客&#xff01; 今天来分享一下另外一种数据结构—栈。主要包括栈的基本概念与其代码实现&#xff0c…...

JVM学习-垃圾回收器(一)

垃圾回收器 按线程数分类 串行垃圾回收器 串行回收是在同一时间段内只允许有一个CPU用于执行垃圾回收操作&#xff0c;此时工作线程被暂停&#xff0c;直至垃圾收集工作结束 在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合&#xff0c;串行回收器的性能表…...

dolphinscheduler standalone安装

官方文档&#xff1a;https://dolphinscheduler.apache.org/en-us/docs/3.1.3/guide/installation/standalone 1.安装&#xff08;以放在/home为例&#xff09; 下载见&#xff1a;https://download.csdn.net/download/taotao_guiwang/89311365 tar -xvzf apache-dolphinsche…...

力扣hot 100:49. 字母异位词分组(python C++)

目录 题目描述&#xff1a;题解&#xff08;python&#xff09;&#xff1a;&#xff08;方法一&#xff1a;排序&#xff09;代码解析代码运行解析 题解&#xff08;C&#xff09;&#xff1a;&#xff08;方法一&#xff1a;排序&#xff09;代码解析&运行解析 原题目链接…...

男士内裤什么材质的好?推荐男士内裤的注意事项

天气已经逐渐热了起来&#xff0c;广大男士们在夏天难免会出一身的汗&#xff0c;不少男士朋友都觉得一些吸湿性、透气性不好的内裤会在夏天穿着很不适&#xff0c;想挑选一些比较适合夏天的男士内裤&#xff0c;但现在的男士内裤品牌和材质分类却比较多&#xff0c;看得大家眼…...

Python操作MySQL数据库的工具--sqlalchemy

文章目录 一、pymysql和sqlalchemy的区别二、sqlalchemy的详细使用1.安装库2.核心思想3.整体思路4.sqlalchemy需要连接数据库5.使用步骤1.手动提前创建数据库2.使用代码创建数据表3.用代码操作数据表3.1 增加数据3.2 查询数据3.3 删除数据3.4 修改数据 一、pymysql和sqlalchemy…...

[AI应用框架/Java] Spring AI 应用开发指南<>概述、快速入门

智能体时代的代码范式转移与 C# 的战略转型 传统的 C# 开发模式&#xff0c;即所谓的“工程导向型”开发&#xff0c;要求开发者创建一个复杂的项目结构&#xff0c;包括项目文件&#xff08;.csproj&#xff09;、解决方案文件&#xff08;.sln&#xff09;、属性设置以及依赖…...

PN7150/PN7160 NFC控制器I²C驱动库详解

1. 项目概述Electronic Cats PN7150/PN7160 库是一个面向嵌入式平台的轻量级 IC 驱动库&#xff0c;专为 NXP 公司推出的 PN7150 和 PN7160 NFC 控制器芯片设计。该库并非简单封装&#xff0c;而是基于 NCI&#xff08;NFC Controller Interface&#xff09;1.0 协议规范实现的…...

AWS推出新工具简化量子纠错开发流程

谷歌近日将量子计算机实用化时间表提前至2029年&#xff0c;这得益于量子计算机硬件、量子纠错和算法方面的重大改进。2019年&#xff0c;谷歌估计需要2000万个量子比特才能破解RSA加密。到2025年5月&#xff0c;谷歌将这一估计数字下调至100万个。今年2月&#xff0c;澳大利亚…...

深入解析Cache机制:从原理到性能优化实战

1. 从理论到实战&#xff1a;Cache概念的职场觉醒第一次真正理解Cache的重要性&#xff0c;是在我接手硬件性能监控项目的那一刻。当时领导让我用perf工具监控处理器性能&#xff0c;输入perf list后满屏的cache-misses、cache-loads指标让我彻底懵了——这些在大学《计算机组成…...

MATLAB 2012b许可证过期怎么办?两种实测有效的解决方法(附License文件下载)

MATLAB 2012b许可证过期的实战修复指南 当你在某个深夜赶论文时&#xff0c;突然发现MATLAB 2012b弹出"License Manager Error -96"的红色警告框&#xff0c;那种感觉就像赛车手在决赛圈突然没油。作为一款已经服役超过十年的经典版本&#xff0c;MATLAB 2012b至今仍…...

怎样评估数据化管理?数据化管理如何持续改进?

在数据这个行当工作了这么多年&#xff0c;我经常会和不同公司的朋友聊天。大家刚开始做数据化管理时总是干劲十足&#xff0c;买工具、建报表、做大屏。但一两年后&#xff0c;常常陷入一种困惑&#xff1a;钱花了&#xff0c;屏挂了&#xff0c;但感觉业务还是老样子。这时候…...

基于VLFM的中文指令视觉语言导航系统设计与实现

基于VLFM的中文指令视觉语言导航系统设计与实现 一、引言 1.1 项目背景 视觉语言导航(Vision Language Navigation,VLN)是具身智能领域的核心任务之一,其目标是让智能体根据自然语言指令在三维环境中自主导航,完成路径规划与空间定位任务[reference:0]。近年来,随着大…...

水泥路面裂缝分类数据集该数据集包含有图片40000张,类别是有裂缝和没有裂缝图像大小是227x227可直接进行使用

水泥路面裂缝分类数据集 该数据集包含有图片40000张&#xff0c;类别是有裂缝和没有裂缝 图像大小是227x227 可直接进行使用...

OpenAI估值逼近6万亿!连散户都杀入,但天价融资背后的“算计”,让人细思极恐

出品 | 网易智能 作者 | 小小 编辑 | 王凤枝 1220亿美元&#xff08;约合8800亿元人民币&#xff09;的承诺资金&#xff0c;8520亿美元&#xff08;约合6.1万亿元人民币&#xff09;的投后估值。 3月31日&#xff0c;OpenAI正式官宣了一轮规模惊人的融资&#xff0c;甚至连散户…...

终极跨平台Iwara视频社区客户端:5个核心功能完全指南

终极跨平台Iwara视频社区客户端&#xff1a;5个核心功能完全指南 【免费下载链接】iwrqk Unofficial Iwara Flutter Client 项目地址: https://gitcode.com/gh_mirrors/iw/iwrqk IwrQk是一款基于Flutter框架开发的跨平台Iwara视频社区客户端应用&#xff0c;为你提供在i…...