SpringBoot基于Thrift实现RPC详细学习记录

由于作者工作需要,需要掌握springboot与thrift相关技术,但是搜索很久没有发现一篇很详尽的文章可供参考学习,踩了很多坑,现在就学习过程进行记录,也希望能帮助到更多人。

首先,创建一个springboot项目,但是此处并不是直接建立springboot项目,而是先建立一个空的java项目,之所以这么做是为了层级更清晰,后面会建立两个项目,一个springboot项目以及一个Thrift项目,两个项目放在同一个java项目中。

项目结构如下,然后我们新建一个springboot项目

如何完善这个springboot项目这步网上很多文章介绍的很清晰,这里引用一篇文章,就不做赘述了。

文章链接:https://blog.csdn.net/baidu_39298625/article/details/98102453

在建立springboot项目时注意一些细节问题:

1.pom.xml文件中注意加入上面这段配置,<resources>标签直接在<build>标签下,在没有这部分配置时,可能会出一些奇奇怪怪的问题,但归根结底就是项目编译后,target目录下缺失一部分文件导致的。问题多发生在配置以及mybatis相关部分。

2.在编写controller层时,不要忘记一些基本问题,注解相关的就是注意在返回值上面,一般控制层接口返回的默认时界面,如果想要返回JSON或者文本时注意添加@ResponseBody注解。

3.另外注意不要忘记@Mapper与@Service。

 

下面言归正传,回到Thrift上,Thrift技术属于RPC多类技术其中之一,具体解释可以看看这篇文章:https://blog.csdn.net/TVwR8OfV0P/article/details/85110617

我个人对RPC的理解是这样,在平时大多接触的是MVC分层式开发,众所周知,一般会在Service层建立“xxxService”接口,再通过“xxxServiceImpl”来实现服务层构建,Controller层调用服务层接口来完成整个项目。现在有一个RPC的概念,我认为其实是将“xxxService”接口替换为Thrift声明的类,这样将服务层拆分,Thrift声明的接口类并不包含接口具体的实现,接口的实现单独部署为一个项目,也就是本文中一开始让大家建立的springboot项目,其作用就是用来完成接口的实现,进行独立部署。至于这样做的好处可以参考这篇文章:https://blog.csdn.net/TVwR8OfV0P/article/details/85043334#comments_10462872

下面是Thrift项目的搭建:

在springboot项目搭建完成之后,我们要建立一个普通的Maven Web项目,这个项目仅仅是用来当做Thrift文件生成java文件的工具项目,并不需要独立部署。(该项目与springboot项目放在一起即可)

新建一个Maven Web项目

建立好项目后,注意以下几点:

1.将项目结构设置成如下图所示,注意文件夹属性一定要设置正确,在左上角 File —> project structure... 中设置。

注意thrift编译关键步骤所需thrift.exe,此处为0.9.3版本,下载后粘贴至thrift文件夹内即可(thrift文件也在文件夹中)。

https://pan.baidu.com/s/1BJJpTN-rHM13Z709hIeQuA   提取码:pzlb

2.pom.xml配置(重中之重

注意几个配置都在<project>标签下同级。完成后记得reload。

完成后会发现右侧maven栏目中多了一个thrift操作项,如图:

至此,基本准备工作完成,可以开始编写.thrift文件了。

上图是本人写的简单thrift文件,我的springboot项目中有一个登录验证的简单接口,将其thrift声明文件写好,主要参数与方法名注意统一,剩余其他的与现有的的接口无关。

thrift文件的写法可以参考这篇文章:https://www.cnblogs.com/cyfonly/p/6059374.html

将写好的thrift文件放入idl文件夹中,就可以点击右侧Maven栏中的thrift选项中的compile按钮。开始编译thrift文件转换成java。

完成编译后,会自动出现如图部分文件,可以看到thrift文件转换生成出了java文件,该文件就是可被识别的RPC接口文件。

此时回到我们最初建立的springboot项目中:

红框内的两个文件就是我们平时开发MVC结构时常用的,服务层接口以及接口实现写法,那么怎么把他转换成RPC模式呢,我个人理解在UserServiceImpl文件中

将implements后面的UserService变成我们刚刚生成的RPCUserService,继续实现接口内容。这样相当于将UserService接口变为一个独立的声明,可以自由嵌入到其他项目中去,我们建立的springboot项目就相当于一个微服务的实现,其他项目通过RPC调用,达到目前主流的微服务概念。

至于其他项目作为客户端调用服务的相关内容可以去网上搜索一下,各个语言或者框架都有不同的调用方式,就不一一叙述了。

这篇文章大体记录了作者本人学习过程中遇到的一些问题,以及最终的理解程度,或许有写的不清晰或者不准确的地方,需要大家在学习过程去体验理解。如果有帮助到你,不妨点个赞留下回复~~谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值