跨语言RPC框架Thrift入门

文章目录

  • 一、Thrift介绍
  • 二、IDL语法详解
    • 基本数据类型
    • 特殊数据类型
    • 集合容器
    • 枚举类型
    • 常量、类型别名
    • struct类型
    • 异常
    • service
    • namespace
    • include
  • 参考

一、Thrift介绍

Thrift:一个轻量级、跨语言(不同语言之间可以进行调用)的RPC框架,用于各服务之间进行RPC通信。
RPC:全名Remote Procedure Call,即远程过程调用。微服务拆分后,它们会被部署在不同的机器节点上,它们之间需要网络通信。
跨语言:通过IDL(Interface Definition Language)接口定义语言,借助代码生成引擎生成各种主流语言的RPC客户端/服务端模板代码,来完成远程调用。

  • 特点:
    开发速度快
    接口维护简单
    学习成本低
    跨语言支持
    Thrift稳定、高效

二、IDL语法详解

官方文档:https://thrift.apache.org/docs/types.html

Thrift基于客户端/服务器结构,客户端和服务器可以使用不同语言进行开发,使用IDL这种中间语言来进行关联。

基本数据类型

bool: A boolean value (true or false)
byte: 带符号的8位的整数类型
i16: 带符号的16位的整数类型
i32: 带符号的32位的整数类型
i64: 带符号的64位的整数类型
double: 64位浮点xing
string: 基于UTF-8编码的字符串类型

特殊数据类型

binary: 未编码的字节序列

集合容器

list: 可重复的有序列表。
set:: 不可重复的无序列表。
map: key-value,key不可重复。

枚举类型

枚举常量必须是32位整数。

enum Status{
	success=200,
	NOTFOUND=404
}

常量、类型别名

//定义常量
const i16 = 1
const map<i32,string> m={1:"girl",2:"boy"}

//类型别名
const map<i32,string> mm

struct类型

相当于面向对象语言中的类定义。

struct Student{
	//前面的1 2 3 4表示序号
	1:required i16 id,//required表示该字段必写
	2:optional string name,//optional表示该字段可选
	3:i16 age=0//不写字段性质则默认为optional,同时指定了默认值为0
}

注意:
struct不能继承,可以嵌套,但是不能自己嵌套自己、枚举类型。
字段序号不可重复。
字段分割符可以是,也可以是;并且二者可以混用。
同一个文件可以定义多个struct,也可以将多个struct定义在不同文件,通过include引入。

异常

异常将会继承每种语言的基础异常类。

exception MyException{
	1:i16 errorCode,
	2:string message
}

service

定义了一个service,相当于java中的接口,其中包含三个方法,返回类型分别为i32、string、void,括号中是对应要传入的参数

service MyService{
	i32 fun1(1:i32 param)
	string fun2(1:string param)
	void fun3()
}

namespace

相当于java中的package,thrift可针对不同语言定义namespace。

//thrift
namespace java com.tracy.test
//java
package com.tracy.test

include

引入其他文件。

//引入了一个名为test.thrift的文件
include "test.thrift"

参考

教程

你可能感兴趣的:(微服务,rpc,java,网络协议)