SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现

时间:2021-12-05 12:28:48

SpringBoot分布式开发系列文章已经持续了一段时间了,每一篇都有核心内容讲给大家。比如:分环境部署配置及服务端口号统一配置,子模块版本号管理及第三方jar依赖管理,单点登录实现,接口安全(签名+令牌)及过滤器配置拦截,全局异常处理及日志打印、防SQL注入等。现在项目里只需添加你的业务代码,就可用于生产环境,同时项目源码也已共享到github。

但大家有没有发现,我讲了这么多,实际这个项目里还缺少一个最基本的服务功能。这也是我今天要给大家讲的内容了。那到底是什么呢?

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现文件系统,对每个项目来说几乎都必不可少。记着在N年前做传统项目时,文件起初是直接存储的项目里面的,后来慢慢通过配置运行项目的Tomact把文件从项目中分离了出去,存储到项目所在机器的磁盘上。不管怎么,这种存储完全受制于Web容器,肯定是不能使用于分布式环境。那么,我现在主要说说分布式文件系统FastDFS的的实现。

FastDFS服务搭建实现

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。它充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

FastDfs文件系统原理及搭建我不再过多的去介绍,我之前已有过一篇文章,里面有详细演示FastDFS文件服务系统的搭建,大家可以阅读参考:FastDFS文件服务器原理及搭建。现在我们直接进入项目,编写代码演示分布式文件系统FastDFS在项目里实现的文件上传下载。

首先在父级项目的pom里添加fastDFS的依赖。

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现

版本号:1.26.2

再在公共模块lyn-common的pom里添加依赖

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现

然后写FastDFS的文件上传服务Service接口。

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现

Service接口实现:

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现

在接口层(lyn-web)的properties配置里添加配置信息:

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现

接口层的启动类里添加注解。

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现

这里对过滤器有专门针对上传文件接口做了验证token处理。并在Aop里不对上传接口进行切面处理。

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现

此刻,所有配置已完成,我们启动项目测试。

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现

查看上传的图片:

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现

存储文件路径处理

分布式文件服务已经实现,接下来你就可以上传文件实现你的业务代码了。那么文件的路径在数据库怎么存储呢?实际这个有经验的开发者基本都知道,文件路径存入数据库时要去掉域名,在接口查询出来又需要补全域名。为什么这样做呢?在我们的生产环境,一般文件肯定是带域名访问,比如我配的是http域名,但使用小程序后,分享时图片无法使用(不支持http域名下载),必须要用https才可正常使用,那我是不是得改文件访问域名呢。如果你把带域名的文件路径存到了数据库,那么是不是查出来的路劲无法访问了。所以,存储时去域名查询加域名这看似麻烦的操作,但在实际项目中更有利于日过的扩展和维护。编写的文件工具类:

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现

添加数据时,去文件域名

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现

查询时补全域名

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现

今天讲了分布式文件系统的搭建及应用,希望能帮到那些正在准备开发或正在开发的小伙伴们。

获取项目源代码,请扫码关注公众号,并发送Springboot获取。

SpringBoot微服务电商项目开发实战 --- 分布式文件系统实现