文章目录

  • 一 基本概述与入门
    • 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 官网学习 一 基本概述与入门相关推荐

  1. Spring官网学习(一)概述

    文章目录 1.Spring官网简介 2.Spring总览 2.1.什么是Spring 2.2.Spring的发展历程 3.Spring的设计理念 3.1.Spring的优点 4.IOC和AOP浅析 4 ...

  2. Apache Storm 官方文档 —— Trident API 概述

    转载自并发编程网 – ifeve.com本文链接地址: Apache Storm 官方文档 -- Trident API 概述 窗口部分的内容是我自己翻译的 Trident 的核心数据模型是" ...

  3. Angular官网学习笔记

    Angular官网学习笔记 一.Angular概述 **什么是Angular:**一个基于TypeScript构建的开发平台包括: 一个基于组件的框架,用于构建可伸缩的Web应用 一组完美集成的库,涵 ...

  4. knockout+html绑定,Knockout.Js官网学习(style绑定、attr绑定)

    Style绑定 style绑定是添加或删除一个或多个DOM元素上的style值.比如当数字变成负数时高亮显示,或者根据数字显示对应宽度的Bar.(注:如果你不是应用style值而是应用CSS clas ...

  5. 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 ...

  6. Spring AOP官网学习

    Spring AOP官网学习 5.1 AOP概念 让我们从定义一些核心的AOP概念和术语开始.这些术语并不是spring特有的.不幸的是,AOP术语不是特别直观. 1.Aspect(方面):跨多个类的 ...

  7. postgresql 官网学习文档

    pg数据官网学习文档,PostgreSQL: Documentation 中文版:文档目录/Document Index: 世界上功能最强大的开源数据库...

  8. Knockout 官网学习文档目录

    官网:https://knockoutjs.com/documentation/introduction.html Knockout-Validation: https://github.com/Kn ...

  9. Apache ECharts 官网布局排版错乱的解决办法

    echarts图库官网:Apache ECharts 像上图中,有时候打开可能样式错乱,解决办法是强制刷新缓存就行了,连续点击刷新 ok了

最新文章

  1. 玉山银行的一名新员工“玉山小i随身金融顾问”
  2. 使用CSDN的Markdown编辑器
  3. oracle数据库应用与开发习题,《Oracle数据库应用》练习题及答案.docx
  4. 【Kafka】kafka 脚本kafka-configs.sh用法解析
  5. 2021,新手初学写作的几个温馨建议
  6. 转:expect的基本用法 - Shell - ChinaUnix.net -
  7. kafka reblance入门
  8. dell服务器怎么用u盘系统安装win7系统教程,戴尔DellU盘重装系统操作教程
  9. cocos2dx box2d使用(一)
  10. sas硬盘安装linux,Intel SAS RAID安装CentOS 5.4 Linux操作系统方法附教程下载
  11. 如何安装仿宋GB2312字体
  12. 安防监控系统的几个基础小知识
  13. 【历史上的今天】5 月 1 日:AMD 成立;第一个 BASIC 程序跑通;世界上第一封垃圾邮件
  14. wireshark抓包红色_wireshark抓包常见提示含义解析
  15. 计算机安全模式怎么消除计,大神为你解说win7系统解除word安全模式的妙计
  16. DataGrid Bind Checkbox....
  17. 计算机组成原理pc和upc,(完整版)计算机组成原理模拟试题ABC卷.doc
  18. 不只是技术!成为IT经理必备的十大软技能
  19. java实现mysql拦截_java分页拦截类实现sql自动分页
  20. ✨英语学习|如何高效做英语阅读笔记

热门文章

  1. STM32 HAL库详细介绍
  2. 2021-11-08笔记本搜不到手机热点的解决
  3. Android Launcher3简介
  4. linux系统之时间同步设置
  5. Apple Watch 的传感器
  6. 【简易版】mac安装mysql5.7.31
  7. js 二进制、十进制、十六进制的互相转换
  8. 处理数据时不进行归一化会有什么影响?归一化的作用是什么?什么时候需要归一化?有哪些归一化的方法?
  9. 【阿里开发手册】所有的类都必须添加创建者和创建日期——在Idea中创建类时自动添加作者信息
  10. 菜鸟学Java——简单验证码生成(Java版)