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 开发逻辑
- 编写IDL文件
- 使用IDL文件生成对应Java代码
- 拷贝Java代码到对应项目目录
- 实现接口逻辑
- 编写server端
- 编写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(包含Prometheus Operator),程序正常跑起来了,…...
Word整理论文参考文献
1.安装Zotero软件 2.安装Zotero的Chrome网站插件,并将插件固定到浏览器 3.安装Word的Zotero插件 4.在DBLP网站https://dblp.org/search 搜索需要添加的参考文献->点击BibTex->点击网页右上角的Zotero符号(即第二步所指的符号)->至…...
计算机网路概述
目录 计算机网络的概念 计算机网络的定义: 计算机网络的组成: 终端系统/资源子网 通信子网 计算机网络的类型 按照拓扑分类编辑 按照范国分类: 按传输方式进行分类 计算机网络体系结构 传输方式 按照传输方向区分 按照传输对象…...
832. 翻转图像 - 力扣
1. 题目 给定一个 n x n 的二进制矩阵 image ,先 水平 翻转图像,然后 反转 图像并返回 结果 。 水平翻转图片就是将图片的每一行都进行翻转,即逆序。 例如,水平翻转 [1,1,0] 的结果是 [0,1,1]。 反转图片的意思是图片中的 0 全部被…...
mumu 模拟器安装
1.下载安装 下载地址 Win 历史版本:http://mumu.163.com/update/win/Mac 历史 版本:http://mumu.163.com/20200515/25905_880858.html 2.设置为竖屏 在设置中心--界面设置页面设置宽720,高1280,DPI为240,如下图所示。…...
opencv实现图片的膨胀腐蚀
opencv实现图片的膨胀腐蚀 在OpenCV中,膨胀和腐蚀是两种基本的图像处理操作,通常用于二值图像中以提取特定的特征。它们是基于图像的形态学操作,使用一个称为结构元素或核的模板来改变图像的形状。 下面是如何使用OpenCV实现图片的膨胀和腐…...
[AIGC] Java常用的JSON库及简单示例
Java常用的JSON库及简单示例 在Java的世界里,JSON库广泛用于日常开发工作,本文将介绍几个常用的JSON库并配以简单的示例代码。 1. Gson Gson是Google提供的一个用来在Java对象和JSON数据之间进行转换的Java库。 它有一定的学习曲线,但一旦熟…...
Linux shell编程学习笔记50:who命令
0 前言 2024年的网络安全检查又开始了,对于使用基于Linux的国产电脑,我们可以编写一个脚本来收集系统的有关信息。比如,我们可以使用who命令来收集当前已登陆系统的用户信息,当前运行级别等信息。 1. who命令 的功能、格式和选项…...
vue使用webscoket
1. 创建 WebSocket 连接 首先,你需要在你的 Vue 组件中创建一个 WebSocket 连接。通常,这会在组件的 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按钮切换功能 根据上面介绍,我们的模式可…...
java并发工具类都有哪些
Java中的并发工具类包括: CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成某些操作。它通常用于线程间的同步,例如在一个线程完成其工作后通知其他线程继续执行。 CyclicBarrier CyclicBarrier是一个同步辅助类,它允许一…...
偏微分方程算法之抛物型方程差分格式编程示例一
目录 一、研究问题 二、C++代码 三、结果分析 一、研究问题 从本节开始将对具体的抛物型偏微分问题算例进行C++编程,以加深对抛物型偏微分方程差分格式构造的理解和应用。 采用向前欧拉格式计算抛物型方程初边值问题:...
数据结构—栈(C语言实现)
文章目录 前言一、栈的概念二、栈的代码实现Stack.hStack.c 三、使用栈解决有效的括号问题总结 前言 小伙伴们,大家好哇!!欢迎来到我的博客! 今天来分享一下另外一种数据结构—栈。主要包括栈的基本概念与其代码实现,…...
JVM学习-垃圾回收器(一)
垃圾回收器 按线程数分类 串行垃圾回收器 串行回收是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束 在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合,串行回收器的性能表…...
dolphinscheduler standalone安装
官方文档:https://dolphinscheduler.apache.org/en-us/docs/3.1.3/guide/installation/standalone 1.安装(以放在/home为例) 下载见:https://download.csdn.net/download/taotao_guiwang/89311365 tar -xvzf apache-dolphinsche…...
力扣hot 100:49. 字母异位词分组(python C++)
目录 题目描述:题解(python):(方法一:排序)代码解析代码运行解析 题解(C):(方法一:排序)代码解析&运行解析 原题目链接…...
男士内裤什么材质的好?推荐男士内裤的注意事项
天气已经逐渐热了起来,广大男士们在夏天难免会出一身的汗,不少男士朋友都觉得一些吸湿性、透气性不好的内裤会在夏天穿着很不适,想挑选一些比较适合夏天的男士内裤,但现在的男士内裤品牌和材质分类却比较多,看得大家眼…...
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…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
