【橘子分布式】Thrift RPC(编程篇)

一、简介

之前我们研究了一下thrift的一些知识,我们知道他是一个rpc框架,他作为rpc自然是提供了客户端到服务端的访问以及两端数据传输的消息序列化,消息的协议解析和传输,所以我们今天就来了解一下他是如何实现这些功能,并且如何在实际代码中使用。
我们需要搭建环境。

1. 安装Thrift 作用:把IDL语言描述的接口内容,生成对应编程语言的代码,简化开发。我们已经介绍了在mac如何使用brew安装了。
2. 引入依赖    作用:引入thrift针对于某一种编程语言的封装 (网络通信 协议【序列化】)

二、结构和模块

1、Thrift核心对象

1. TTransport
   作用:底层封装了rpc的网络通信能力,具体实现有下面三种
   TSocket 阻塞IO通信
   TNonblockdingTransport 非阻塞网络通信
   TFramedTransport 加入了封帧的操作 (压缩后 数据边界问题)  
2. TProtocol
   作用:底层封装了rpc的关于协议的处理 (序列化方式)
   TBinayProtocol 二进制进行序列化
   TCompactProtocol 压缩方式 处理二进制 
   TJSONProtocol  JSON进行序列化
 这里需要说明一下,当我们的序列化方式走了TCompactProtocol压缩处理的时候,你最好使用TFramedTransport来处理网络通信,因为一旦数据开启了压缩,那就可能传输很大量的数据,数据的模样和原始的不同,此时可能因为缓冲区大小等等出现半包粘包问题。需要解决封帧。其他的方式一般没啥,因为rpc数据量不会很大,一般没有半包粘包,具体问题具体分析吧。而且你能看到他提供多种协议,并不是用的http协议这个最常见的,这个没啥说的,高性能的网络协议,一般都不用http,http的优势是简单通用。
3. TProcessor
   作用:进行业务处理,把通信数据 和 业务功能整合在一起。换句话说我们的业务代码就在这里,其实就是把数据拿过来了,开始业务处理了。
4. TServer 服务端
	服务端就是用上面的三个组件,组合起来实现具体的服务端逻辑,根据不同的实现有异步的有同步的等等,并且发布服务出去。

2、项目结构

我们在编码之前需要明确一点,就是作为rpc(Remote Procedure Call),远程调用必然存在一个服务的提供者和一个服务的调用者。所以我们必须有的两个模块是rpc-server和rpc-client。
在实际开发的时候,我们比如说服务调用者和提供者可能有相同的数据比如User这个类,那你不能在两边各自都写一个吧,肯定是写一份维护就好了。所以我们还需要一个rpc-common的模块,用来声明那些公用的类,包括一些公用的实体类,还有发起rpc调用的service代理类等等。
于是我们就抽象出了三个模块。

1. thrift-client  代表的是服务的调用者,客户端要想本地方法那样调用远端方法,底层必然是代理。
2. thrift-server  代表的是服务的提供者
	2.1. 实现服务接口 :idl语言生成的
	2.2. 创建服务端代码
3. thrift-common  RPC编程共有的内容 1,实体类型 2,服务接口
	3.1. 通过IDL语言 定义 client与服务端 共用的数据类型 和 服务接口 
	3.2. client server端需要引入 common模块

我们这里是以同一个工程下的模块化的形式搭建项目,实际上你也可以单独创建不同的工程。

3、引入依赖

我们这里是一个项目多个模块,所以我直接在父级项目引入了。

<modules>
    <module>thrift-client</module>
    <module>thrift-server</module>
    <module>thrift-common</module>
</modules>

<properties>
    <thrift.version>0.22.0</thrift.version>
    <javax.annotation.version>1.3.2</javax.annotation.version>
    <slf4j-api.version>1.7.32</slf4j-api.version>
    <logback-classic.version>1.2.9</logback-classic.version>
    <junit.version>3.8.1</junit.version>

    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
	<!-- 引入thrift针对于某一种编程语言的封装,java就是maven管理jar,你要是用py开发,那就是pip (网络通信 协议【序列化】)-->
    <dependency>
        <groupId>org.apache.thrift</groupId>
        <artifactId>libthrift</artifactId>
        <version>${thrift.version}</version>
    </dependency>

    <dependency>
        <group
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值