thrift的简单使用

写在前面

本文一起看下一种由facebook出品的rpc框架thrift。

源码 。

1:开发步骤

1:编写thrift idl文件
2:根据thrift idl文件生成java模板代码
3:继承模板代码的*.Iface接口给出server的具体服务实现
4:使用模板的HelloWorldService.Processor编写server端
5:使用HelloWorldService.Client编写服务端调用程序

2:实战

  • 准备编译生成器
    这里 。

  • idea准备插件
    在这里插入图片描述

无该步骤也可以

  • 编写idl
    hello.thrift:
service HelloWorldService {string say(1: string username)
}
  • 通过生成器生成模板文件
$ ./thrift-0.19.0.exe -gen java hello.thrift

在这里插入图片描述

生成的模板Java文件很长,主要关注如下几个类即可:

Iface:服务端通过实现此接口提供同步服务
AsyncIface:服务端通过实现此接口提供异步服务
Client:客户端通过此类的实例对象以同步的方式访问服务端
AysyncClient:客户端通过此类的是实例以异步的方式访问服务端

将生成的代码拷贝到项目,备用。

  • pom
<dependency><groupId>org.apache.thrift</groupId><artifactId>libthrift</artifactId><version>0.19.0</version>
</dependency>
  • service实现类
public class HelloWorldServiceImpl implements HelloWorldService.Iface {@Overridepublic String say(String username) throws TException {return "Hello " + username;}
}
  • server类
public class SimpleServer {public static void main(String[] args) throws Exception {ServerSocket serverSocket = new ServerSocket(ServerConfig.SERVER_PORT);TServerSocket serverTransport = new TServerSocket(serverSocket);HelloWorldService.Processor processor =new HelloWorldService.Processor<HelloWorldService.Iface>(new HelloWorldServiceImpl());TBinaryProtocol.Factory protocolFactory = new TBinaryProtocol.Factory();TSimpleServer.Args tArgs = new TSimpleServer.Args(serverTransport);tArgs.processor(processor);tArgs.protocolFactory(protocolFactory);// 简单的单线程服务模型 一般用于测试TServer tServer = new TSimpleServer(tArgs);System.out.println("Running Simple Server");tServer.serve();}
}

启动。

  • client类
public class SimpleClient {public static void main(String[] args) {TTransport transport = null;try {transport = new TSocket(ServerConfig.SERVER_IP, ServerConfig.SERVER_PORT, ServerConfig.TIMEOUT);TProtocol protocol = new TBinaryProtocol(transport);HelloWorldService.Client client = new HelloWorldService.Client(protocol);transport.open();String result = client.say("Leo");System.out.println("Result =: " + result);} catch (TException e) {e.printStackTrace();} finally {if (null != transport) {transport.close();}}}
}

运行:

Result =: Hello LeoProcess finished with exit code 0

酱!!!

写在后面

参考文章列表

Apache Thrift系列详解(一) - 概述与入门 。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode: 645.错误的集合 题解【超详细】

题目 集合 s 包含从 1 到 n 的整数。不幸的是&#xff0c;因为数据错误&#xff0c;导致集合里面某一个数字复制了成了集合里面的另外一个数字的值&#xff0c;导致集合 丢失了一个数字 并且 有一个数字重复 。 给定一个数组 nums 代表了集合 S 发生错误后的结果。 请你找出重复…

Redis模块一:缓存简介

目录 缓存的定义 应用 生活案例 程序中的缓存 缓存优点 缓存的定义 缓存是⼀个高速数据交换的存储器&#xff0c;使用它可以快速的访问和操作数据。 应用 1.CPU缓存&#xff1a;CPU缓存是位于CPU和内存之间的临时存储器&#xff0c;它的容量通常远小于内存&#xff0…

微信小程序云开发手搓微标提示,逻辑思路记录及代码实现

目录 写前小叙 功能需求背景 首页js的逻辑思路第一部分 发布公告js逻辑 首页js显示“新”公告思路实现 首页js关闭“新”公告思路实现 管理员“已阅读”js逻辑 首页js显示“新”邮件思路实现 首页js关闭“新”邮件思路实现 写前小叙 今儿凌晨&#xff0c;我又是一个人…

综合管廊安全监测,助力市政管廊智能化管理

综合管廊是一种集管线维护、建设、管理于一体的地下综合通道&#xff0c;可以将电力、通讯、燃气、供热、供水等工程管线集于一体&#xff0c;综合管廊对于城市建设具有重要意义&#xff0c;可以防止管线破裂&#xff0c;杜绝反复开挖路面&#xff0c;有效缓解交通拥堵&#xf…

强化历程7-排序算法(2023.9.12)

此笔记学习图片来自于如下网址 1https://www.west999.com/info/html/chengxusheji/Javajishu/20190217/4612849.html 文章目录 强化历程7-排序算法1 冒泡排序(交换排序)2 选择排序3 直接插入排序4 希尔排序5 归并排序6 快速排序7 堆排序8 计数排序 强化历程7-排序算法 1 冒泡排…

商业综合体AI+视频安防监控与智能监管解决方案

一、方案背景 商业综合体需要具备更好的品质和环境才能吸引更多客流&#xff0c;如何有效地进行内部管理、外部引流&#xff0c;是综合体管理人员思考的重点。 传统的视频监控需要靠人盯牢屏幕或者发生报警后通过查看录像&#xff0c;才能找到意外事件相关人员与起因&#xf…

4G模块驱动移植

一、4G模块概述 1、调试的模块型号是广和通的 NL668-EAU-00-M.2。 2、使用的接口是 M.2 Key-B。实际只用到了M2里的USB接口。 调试过程 以QMI_WWAN号方式进行说明&#xff0c;其他拨号方式也试过。最后以QMI_WWAN方式调通了&#xff0c;拨号成功了。 其他拨号方式因为现有文档…

通过Power Platform自定义D365CE业务需求 - 1. Microsoft Power Apps 简介

Microsoft Power Apps是一个趋势性的、无代码和无代码的商业应用程序开发平台,配有一套应用程序、服务和连接器。其数据平台为构建适合任何业务需求的自定义业务应用程序提供了快速开发环境。随着无代码、少代码应用程序开发的引入,任何人都可以快速构建低代码应用程序,并与…

linux系统报“INFO: task java:xxx blocked for more than 120 seconds.”解决办法

1、问题描述 linux系统&#xff0c;输入dmesg -T&#xff0c;报“INFO: task java:xxx blocked for more than 120 seconds.”&#xff0c;如下 一般情况下&#xff0c;linux会把可用内存的40%的空间作为文件系统的缓存。当缓存快满时&#xff0c;文件系统将缓存中的数据整体同…

安卓系列机型 另类体验第三方系统 DSU操作步骤解析 不影响主系统开启第二系统

dsu loader即 动态系统更新&#xff0c;可以在使用动态分区的安卓设备上&#xff0c;不影响原来系统的同时安装一个副系统&#xff0c;用于体验最新的原生安卓系统。可以不影响主系统的基础上体验其他gsi第三方。DSU 依赖于 Android 动态分区功能&#xff0c;并要求 GSI 作为可…

VRTK4⭐四.和 UI 元素交互

文章目录 &#x1f7e5; 安装Tilia Unity.UI&#x1f7e7; 配置射线与UI交互器1️⃣ 配置直线射线2️⃣ 配置UI交互器 &#x1f7e8; 配置UI1️⃣ 更新EventSystem2️⃣ 进行Canvas设置 我们要实现的功能: 右手触摸到圆盘:显示直线射线 右手圆盘键按下:与选中UI交互 &#x1f7…

分类散点图 stripplot() 加辅助线axhline() 多图合一

分类散点图 stripplot 加辅助线axhline 多图合一 效果图代码 画图没有什么可说的&#xff0c;直接上图 效果图 代码 # 绘制图&#xff0c; 查看是否数值在阈值上 plt.figure(figsize(30, 18)) n 0 for header, value_list in info_dict.items():ref_value_list ref_info_dic…

[S2] Challenge 25 心脏病预测

问题 您是一家医疗保健公司的数据科学家&#xff0c;试图创建患者是否患有心脏病的预测因子。目前&#xff0c;您正在试验 11 种不同的特征&#xff08;潜在心脏病指标&#xff09;和 XGBoost 分类模型&#xff0c;您注意到它的性能可能会根据其调整方式而发生很大变化。在此挑…

以矩阵的形式,对点或线段或多边形绕固定点旋转方法

一、仅旋转 &#xff0c;其中x,y旋转前横纵坐标&#xff0c;x’,y’为旋转后横纵坐标。θ旋转角度&#xff0c;单位为弧度。 等价于&#xff1a;x’ xcosθysinθ&#xff0c;y’-xsinθycosθ 注&#xff1a;此矩阵仅为旋转矩阵&#xff0c;不包含平移和缩放。 二、旋转平…

eclipse 源代码文件报错处理

用 eclipse 的 kepler 版本编译项目的时候没有提示、刷新之后发现居然 “新增” 了几个红叉。但是几分钟前还好好运行&#xff1b;都是从代码仓库更新来的、不可能报错。 看了文件最后的更新时间&#xff0c;更加确认了想法&#xff1a; 于是找一个无端报错的文件、随便加一个花…

【Linux】动静态库

目录 1.静态库2.动态库3.静态库的使用区别总结 1.静态库 我们在linux中已经帮我们下载好了C和C所需要的各种库&#xff0c;库也是文件&#xff0c;实际上就是各种接口的实现&#xff0c;我们在使用系统提供的譬如printf等函数时&#xff0c;就是使用系统中的库文件。使用一个库…

成功的海外网红营销:文化和价值观冲突的应对策略

随着全球数字化和社交媒体的崛起&#xff0c;海外网红营销已经成为企业推广产品和服务的一种重要方式。然而&#xff0c;这种全球性的营销活动也伴随着文化和价值观的多样性&#xff0c;容易导致潜在的冲突和误解。为了取得成功并避免不必要的争议&#xff0c;企业需要深入了解…

Solidity 小白教程:21. 调用其他合约

Solidity 小白教程&#xff1a;21. 调用其他合约 调用已部署合约 开发者写智能合约来调用其他合约&#xff0c;这让以太坊网络上的程序可以复用&#xff0c;从而建立繁荣的生态。很多web3项目依赖于调用其他合约&#xff0c;比如收益农场&#xff08;yield farming&#xff0…

北工大汇编——综合题(2)

题目要求 编写一个比赛得分程序。共有7 个评委&#xff0c;按百分制打分&#xff0c;计分 原则是去掉一个最高分和一个最低分&#xff0c;求平均值。要求&#xff1a; 评委的打分以十进制从键盘输入。成绩以十进制给出&#xff0c;并保留 1位小数。输入输出时屏幕上要有相应提…

Unity WebGL 编译 报错: emcc2: error: ‘*‘ failed: [WinError 2] ϵͳ�Ҳ���ָ�����ļ���解决办法

文章目录 错误日志可能的原因及解决办法:导出路径不能有中文系统名(win)含有中文, 修改环境变量Temp和Tmp, 如下图:真正的原因: 杀毒软件删除了部分wasm相关文件,如: 错误日志 Building Library\Bee\artifacts\WebGL\build\debug_WebGL_wasm\build.js failed with output: emc…