Apache Thrift 官网学习 一 基本概述与入门
文章目录
- 一 基本概述与入门
- 1.1 官网知识
- 1.2 下载安装
- 1.3 基本数据结构
- 1.4 基本案例入门
- 1.4.1 编写thrift文件
- 1.4.2 新建springBoot项目
- 1.4.3 生成文件
- 1.4.4 文件解析
- 1.4.5 定义实现类
- 1.4.6 服务端
- 1.4.7 客服端
- 1.4.8 测试
一 基本概述与入门
1.1 官网知识
- Thrift是一个轻量级、跨语言的远程服务调用框架,最初由Facebook开发,后面进入Apache开源项目。它通过自身的IDL中间语言, 并借助代码生成引擎生成各种主流语言的RPC服务端/客户端模板代码。
- Thrift支持多种不同的编程语言,包括C++、Java、Python、PHP、Ruby等,本系列主要讲述基于Java语言的Thrift的配置方式和具体使用。
- 官网:https://thrift.apache.org/
1.2 下载安装
- 下载地址:http://www.apache.org/dyn/closer.cgi?path=/thrift/0.15.0/thrift-0.15.0.exe
- 配置环境变量到path路径中
- 验证:
thrift -version
- idea中安装
thrift
插件,可以实现thrift
语法自动提示
- 由官网可知这是一门新的语言,当然有他的基本语法,下面我们来认识下
1.3 基本数据结构
- 基本类型:
bool
: 布尔值;byte
: 8位有符号整数;i16
: 16位有符号整数
i32
: 32位有符号整数;i64
: 64位有符号整数;double
: 64位浮点数
string
: UTF-8编码的字符串;binary
: 二进制串 - 结构体类型:
struct
: 定义的结构体对象 - 容器类型:
list
: 有序元素列表;set
: 无序无重复元素集合;map
: 有序的key/value集合 - 异常类型:
exception
: 异常类型 - 服务类型:
service
: 具体对应服务的类
1.4 基本案例入门
1.4.1 编写thrift文件
idea中编写一个Person.thrift文件
// 定义包名
namespace java com.shu.demo.thrift/**
* 基本类型:bool: 布尔值byte: 8位有符号整数i16: 16位有符号整数i32: 32位有符号整数i64: 64位有符号整数double: 64位浮点数string: UTF-8编码的字符串binary: 二进制串结构体类型:struct: 定义的结构体对象容器类型:list: 有序元素列表set: 无序无重复元素集合map: 有序的key/value集合异常类型:exception: 异常类型服务类型:service: 具体对应服务的类
**/// 定义别名:将thrift基本数据类型别名为Java数据类型,方便使用
typedef i16 short
typedef i32 int
typedef i64 long
typedef string String
typedef bool Boolean
typedef double Double// 定义一个struct:相当于Java中的类
struct person{1:optional String id;
2:optional String userName;
3:optional String passWord;
4:optional Boolean isCheck;
}// 定义一个异常
exception personexception{1:optional int code;
2:optional String message;
}// 定义一个服务集合
service personservice{// 通过用户名获取信息,并扔出异常person getPersonInfoByUserNmae(1:required String username) throws (1: personexception exce )// 通过用户名检查是否可用Boolean IsCheck(1:required String username)}// 生成命令:thrift -gen java Person.thrift
1.4.2 新建springBoot项目
<dependency><groupId>org.apache.thrift</groupId><artifactId>libthrift</artifactId><version>0.15.0</version></dependency>
1.4.3 生成文件
# 格式
thrift -gen <language> <Thrift filename>
# 命令,进入该文件目录,cmd中执行
thrift -gen java Person.thrift
# 把生成的文件拷到SpringBoot项目中
1.4.4 文件解析
Iface
:服务端通过实现HelloWorldService.Iface接口,向客户端的提供具体的同步业务逻辑。AsyncIface
:服务端通过实现HelloWorldService.Iface接口,向客户端的提供具体的异步业务逻辑。Client
:客户端通过HelloWorldService.Client的实例对象,以同步的方式访问服务端提供的服务方法。AsyncClient
:客户端通过HelloWorldService.AsyncClient的实例对象,以异步的方式访问服务端提供的服务方法。
1.4.5 定义实现类
package com.example.thrift;
import com.example.thrift.thrift.person;
import com.example.thrift.thrift.personexception;
import com.example.thrift.thrift.personservice;
import org.apache.thrift.TException;/*** @Author shu* @Date: 2022/02/06/ 16:02* @Description 实现接口,自定义方法逻辑**/
public class PersonServiceImpl implements personservice.Iface{@Overridepublic person getPersonInfoByUserNmae(String username) throws personexception, TException {System.out.println("客服端数据:"+username);person person=new person();person.setId("1");person.setUserName("admin");person.setPassWord("123456");person.setIsCheck(false);return person;}@Overridepublic boolean IsCheck(String username) throws TException {System.out.println("客服端数据:"+username);return false;}
}
1.4.6 服务端
package com.example.thrift.server;
import com.example.thrift.PersonServiceImpl;
import com.example.thrift.thrift.personservice;
import org.apache.thrift.TProcessorFactory;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.server.THsHaServer;
import org.apache.thrift.server.TServer;
import org.apache.thrift.transport.TNonblockingServerSocket;
import org.apache.thrift.transport.TTransportException;
import org.apache.thrift.transport.layered.TFastFramedTransport;/*** @Author shu* @Date: 2022/02/06/ 16:08* @Description 服务端**/
public class ThriftServer {public static void main(String[] args) throws TTransportException {// 建立连接TNonblockingServerSocket serverSocket =new TNonblockingServerSocket(8803);// 建立高可用serverTHsHaServer.Args arg=new THsHaServer.Args(serverSocket).maxWorkerThreads(4).minWorkerThreads(2);// 处理器personservice.Processor<PersonServiceImpl> processor =new personservice.Processor<>(new PersonServiceImpl());// 设置协议处理器arg.protocolFactory(new TCompactProtocol.Factory());// 设置传输处理器arg.transportFactory(new TFastFramedTransport.Factory());// 处理器工厂arg.processorFactory(new TProcessorFactory(processor));// 开始执行TServer tServer = new THsHaServer(arg);System.out.println("Running Simple Server");tServer.serve();}
}
1.4.7 客服端
package com.example.thrift.client;import com.example.thrift.thrift.person;
import com.example.thrift.thrift.personservice;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.layered.TFramedTransport;/*** @Author shu* @Date: 2022/02/06/ 16:08* @Description 客服端**/
public class ThriftClient {public static void main(String[] args) {TTransport transport =null;try {// 连接transport = new TFramedTransport(new TSocket("127.0.0.1",8803),600);// 协议,注意服务端保持一致TProtocol protocol = new TCompactProtocol(transport);// 调用方法personservice.Client client = new personservice.Client(protocol);// 打开连接transport.open();// 调用方法person result = client.getPersonInfoByUserNmae("Leo");System.out.println("Result =: " + result);} catch (TException e) {e.printStackTrace();} finally {if (null != transport) {transport.close();}}}
}
1.4.8 测试
到此一个简单的入门就完成了
Apache Thrift 官网学习 一 基本概述与入门相关推荐
- Spring官网学习(一)概述
文章目录 1.Spring官网简介 2.Spring总览 2.1.什么是Spring 2.2.Spring的发展历程 3.Spring的设计理念 3.1.Spring的优点 4.IOC和AOP浅析 4 ...
- Apache Storm 官方文档 —— Trident API 概述
转载自并发编程网 – ifeve.com本文链接地址: Apache Storm 官方文档 -- Trident API 概述 窗口部分的内容是我自己翻译的 Trident 的核心数据模型是" ...
- Angular官网学习笔记
Angular官网学习笔记 一.Angular概述 **什么是Angular:**一个基于TypeScript构建的开发平台包括: 一个基于组件的框架,用于构建可伸缩的Web应用 一组完美集成的库,涵 ...
- knockout+html绑定,Knockout.Js官网学习(style绑定、attr绑定)
Style绑定 style绑定是添加或删除一个或多个DOM元素上的style值.比如当数字变成负数时高亮显示,或者根据数字显示对应宽度的Bar.(注:如果你不是应用style值而是应用CSS clas ...
- PCL官网学习OpenNI Grabber 调用奥比中光Astra s 遇到问题openni2_grabber.cpp @ 325 : No devices connected.
PCL官网学习OpenNI Grabber 调用奥比中光Astra s 遇到问题openni2_grabber.cpp @ 325 : No devices connected. 问题描述 termi ...
- Spring AOP官网学习
Spring AOP官网学习 5.1 AOP概念 让我们从定义一些核心的AOP概念和术语开始.这些术语并不是spring特有的.不幸的是,AOP术语不是特别直观. 1.Aspect(方面):跨多个类的 ...
- postgresql 官网学习文档
pg数据官网学习文档,PostgreSQL: Documentation 中文版:文档目录/Document Index: 世界上功能最强大的开源数据库...
- Knockout 官网学习文档目录
官网:https://knockoutjs.com/documentation/introduction.html Knockout-Validation: https://github.com/Kn ...
- Apache ECharts 官网布局排版错乱的解决办法
echarts图库官网:Apache ECharts 像上图中,有时候打开可能样式错乱,解决办法是强制刷新缓存就行了,连续点击刷新 ok了
最新文章
- 玉山银行的一名新员工“玉山小i随身金融顾问”
- 使用CSDN的Markdown编辑器
- oracle数据库应用与开发习题,《Oracle数据库应用》练习题及答案.docx
- 【Kafka】kafka 脚本kafka-configs.sh用法解析
- 2021,新手初学写作的几个温馨建议
- 转:expect的基本用法 - Shell - ChinaUnix.net -
- kafka reblance入门
- dell服务器怎么用u盘系统安装win7系统教程,戴尔DellU盘重装系统操作教程
- cocos2dx box2d使用(一)
- sas硬盘安装linux,Intel SAS RAID安装CentOS 5.4 Linux操作系统方法附教程下载
- 如何安装仿宋GB2312字体
- 安防监控系统的几个基础小知识
- 【历史上的今天】5 月 1 日:AMD 成立;第一个 BASIC 程序跑通;世界上第一封垃圾邮件
- wireshark抓包红色_wireshark抓包常见提示含义解析
- 计算机安全模式怎么消除计,大神为你解说win7系统解除word安全模式的妙计
- DataGrid Bind Checkbox....
- 计算机组成原理pc和upc,(完整版)计算机组成原理模拟试题ABC卷.doc
- 不只是技术!成为IT经理必备的十大软技能
- java实现mysql拦截_java分页拦截类实现sql自动分页
- ✨英语学习|如何高效做英语阅读笔记