thrift的简单使用

news2024/12/23 11:31:42

写在前面

本文一起看下一种由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 {
    @Override
    public 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 Leo

Process finished with exit code 0

酱!!!

写在后面

参考文章列表

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

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

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

相关文章

计算机毕设 LSTM的预测算法 - 股票预测 天气预测 房价预测

文章目录 0 简介1 基于 Keras 用 LSTM 网络做时间序列预测2 长短记忆网络3 LSTM 网络结构和原理3.1 LSTM核心思想3.2 遗忘门3.3 输入门3.4 输出门 4 基于LSTM的天气预测4.1 数据集4.2 预测示例 5 基于LSTM的股票价格预测5.1 数据集5.2 实现代码 6 lstm 预测航空旅客数目数据集预…

软件测试中最坏与一般健壮性测试用例区别

我们看下面一个问题 1.如果有一个n变量函数&#xff0c;健壮最坏情况测试会产生多少个测试用例 2.如果有一个n变量函数的被测程序&#xff0c;健壮性测试会产生多少个测试用例 首先我们知道一个变量的健壮测试有七个测试用例 即下图所示 1.问题一答案&#xff1a; 总的测试…

计算机竞赛 深度学习 python opencv 火焰检测识别

文章目录 0 前言1 基于YOLO的火焰检测与识别2 课题背景3 卷积神经网络3.1 卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV54.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 数据集准备5.1 数…

TCP/IP客户端和服务器端建立通信过程

客户端和服务器端建立通信过程 客户端 connectToHost(const QString &, quint16 , QIODevice::OpenMode , QAbstractSocket::NetworkLayerProtocol )服务器端

Jmeter接口测试学习

1、设置CSV数据文件时&#xff0c;线程数设置为2或者多个&#xff0c;可以读取多行登录用户信息 2、循环&#xff0c;线程多次登录 3、http接口登录配置 4、CSV数据文件配置 数据文件&#xff1a; 5、如果需要鉴权(authorization)&#xff0c;如postman 下Basic Auth,可以设…

第一章:最新版零基础学习 PYTHON 教程(第三节 - 下载并安装Python最新版本)

在这里&#xff0c;我们将讨论如何获得与在 Windows/Linux/mac OS 上安装 Python 相关的所有问题的答案。Python由Guido van Rossum于20世纪90年代初开发&#xff0c;最新版本为3.11&#xff0c;我们可以简称为Python3。 如何下载并安装Python&#xff1f; 要了解如何安装 P…

【保姆级】WebSocket是什么有什么用

WebSocket WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输。 HTTP协议和WebSocket协议对比&#xff1a; HTTP是短连接 WebSo…

SpringCloud OpenFeign--声明式WebService 客户端

&#x1f600;前言 本篇博文是关于SpringCloud OpenFeign的基本介绍&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动…

排序算法—

1 1.冒泡排序&#xff08;相邻两两比较&#xff09; 理解&#xff1a;进行n轮循环&#xff0c;相邻元素两两比较&#xff0c;交换位置 先将最大/最小元素放到最后一个位置 然后缩小j的比较范围&#xff0c;因为每一轮循环最后一个元素的位置都已经确定了 #include <stdio.h&…

Ubuntu 图形界面查看Mysql 数据库内容

1.安装mysql workbench 打开ubuntu软件中心&#xff0c;搜索如下字符&#xff0c;安装这个社区版的workbench 2.登录workbench 按下图依次打开该安装后的软件 点击此处进行登录&#xff0c;首次登录可能需要密码&#xff0c;第二次如果记住密码了就不需要了。 3.查看数据库的…

Python程序设计实例 | 学生管理数据库系统的开发

本文将通过一个学生管理数据库系统的开发过程来展示如何系统地基于Python实现SQLite数据库编程。以下首先提出数据库系统的基本结构&#xff0c;以及如何通过SQLite逐步达到这些要求并进行常规操作。 01、数据表结构 该学生管理数据库系统包括4张表&#xff1a; 专业表、学生…

华为数通方向HCIP-DataCom H12-821题库(单选题:361-380)

第361题 如图所示是一台路由器的BGP输出信息。那么以下关于这段信息的描述,错误的是哪一项? <Huawei>display bgp error Error Type: Peer Error Peer Address:10.1.1.2 VRFName:Public Error Info: Router-ID conflictA、该路由器邻居地址是10.1.1.2 B、Error Type显…

SWC 流程

一个arxml 存储SWC &#xff08;可以存多个&#xff0c;也可以一个arxml存一个SWC&#xff09;一个arxml 存储 composition &#xff08;只能存一个&#xff09;一个arxml 存储 system description (通过import dbc自动生成system) 存储SWC和composition的arxml文件分开&#…

Python基础指令(上)

Python基础指令上 常量和表达式变量和类型1. 什么是变量2. 变量的语法2.1 定义变量2.2 使用变量 3. 变量的类型4. 为什么要有这么多类型5. 动态类型特性 注释输入输出1. 程序与用户的交互2. 通过控制台输出3. 通过控制台输入 运算符1. 算术运算符2. 关系运算符3. 逻辑运算符4. …

科学家首次为地球“全面体检”;国产光刻机或系误传;推特或将按月收费丨RTE开发者日报 Vol.52

开发者朋友们大家好&#xff1a; 这里是「RTE 开发者日报」&#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

nginx(CVE-2022-41741和41742) 漏洞修复

一、漏洞描述 近期Nginx安全发布几个中高危漏洞&#xff1a;CVE-2022-41741 (Memory Corruption) – CVSS score 7.1 (High)、CVE-2022-41742 (Memory Disclosure) – CVSS score 7.0 (High)&#xff0c;上述是&#xff1a;MP4 流媒体模块&#xff08;ngx_http_mp4_module&…

固定资产管理系统有哪些基本功能

固定资产管理系统是一种用于管理和跟踪企业固定资产的软件。它能够帮助企业实现固定资产的全生命周期管理&#xff0c;包括资产采购、仓储、申请、维护、损坏等环节。以下是固定资产管理系统的一些基本功能&#xff1a;资产信息管理&#xff1a;系统可记录公司固定资产信息&…

「聊设计模式」之桥接模式(Bridge)

&#x1f3c6;本文收录于《聊设计模式》专栏&#xff0c;专门攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎持续关注&&收藏&&订阅&#xff01; 前言 设计模式是程序员不可或缺的一部分。它们提供了一种通用的…

华为数通方向HCIP-DataCom H12-831题库(单选题:61-80)

第61题 R3与R4的IS-IS Leve1-1邻居没有建立,根据本图的信息可能的原因是? A、R3与R4的互连接口circuit-type不四配 B、R3与R4的区域号不同 C、R3与R4的IS-Leve1不匹配 D、R3与R1的IIH认证失败 答案:B 解析: 直接看图中的非0数字就能得出答案。 Display isis error 是查看…

如何开心的在iOS上玩NDS游戏

如何开心的在iOS上玩NDS游戏 先说结论&#xff0c;有原生方案和web方案2种。 Web 方案 其实现在的 webassembly 技术已经非常成熟了&#xff0c;我们可以通过编译 C 语言的模拟器代码&#xff0c;然后在浏览器上运行。 这样就可以实现一个在线的模拟器了&#xff0c;而且不…