当前位置:   article > 正文

SpringCloud微服务架构实战使用分布式文件系统DFS_spring cloud 网络文件系统

spring cloud 网络文件系统

使用分布式文件系统 DFS

微服务应用使用分布式方式进行部署,并且有可能随时随地部署多个副本,所以必须有一个独立的文件系统来管理用户上传和使用的资源文件,包括图片和视频等。

在模块goods-web 的设计中,我们是使用FastDFS这个轻量级的分布式文件系统来设计的。如果使用云服务商提供的对象存储服务来设计,如OSS服务等,则可以参照服务提供商的使用说明,并结合本实例进行设计。

下面针对库存管理中,商品创建和编辑时使用的图片,实现在FastDFS上进行存储和管理的设计。

有关FastDFS的安装、集群构建和相关配置等,将在运维部署部分的相关章节中进行介绍。

SpringCloud微服务架构实战使用分布式文件系统DFS

 

分布式文件系统客户端开发

FastDFS 提供了Java语言使用的客户端开发包,但在Spring Boot中使用时还需要进行二次开发。为了简化开发过程,我们使用tobato在GitHub上开源的一个专为Spring Boot开发者提供的封装。

首先,在goods-web模块中,增加如下依赖引用:

  1. <dependency>
  2. <groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId><version>1.26.4-RELEASE</version>
  3. </dependency>

然后,在模块的配置文件application.yml 中增加如下配置:

  1. fdfs:
  2. soTimeout: 1501
  3. connectTimeout:601thumbImage:
  4. width: 150height: 150trackerList:
  5. - 192.168.1.214:22122-192.168.1.215:22122spring.jmx.enabled: false
  6. file.path.head:http://192.168.1.214:8080/

这个配置假设 FastDFS 的TrackerServer安装了两台服务器,它们的P地址分别为“192.168.1.214”和“192.168.1.215”,并且可以通过链接“http:/192.168.1.214:8080/”使用文件。

接着,在工程的启动文件中增加注解@Import和@EnableMBeanExport,即导入fastdfs-client的相关配置,代码如下所示:

  1. @SpringBootApplication@EnableDiscoveryClient
  2. @EnableFeignClients (basePackages = "com.demo")@componentScan(basePackages = "com.demo")
  3. R Import(FdfsClientConfig.class)
  4. @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)public class GoodswebApplication {
  5. public static void main(String[]args) {
  6. SpringApplication.run (GoodsWebApplication.class, args);
  7. }
  8. }

为了确认上面的引用和配置都已经准备就绪,可以启动应用验证一下。如果启动应用正常,则说明上面的配置是正确的。

现在,我们就可以创建一个“FastefsClient”实现文件的上传功能了,代码如下所示:

  1. @service
  2. public class FastefsClient {
  3. @Autowired
  4. protected FastFileStorageClient storageClient;
  5. public String uploFile (MultipartFile file){
  6. String fileType=
  7. FilenameUtils.getExtension(file.get0riginalFilename ()).toLowerCase();
  8. StorePath path =null;
  9. try {
  10. path = storageclient.uploadFile(file.getInputstream(),
  11. file.getsize(, fileType, nul1);
  12. Jcatch (IOException e){
  13. e.printstackTrace();
  14. }
  15. if(path !=null) {
  16. return path.getFu1lPath(;}else {
  17. return null;
  18. }
  19. public string uploile(Inputstream inputstream,Long size, String type)(
  20. StorePath path = null;
  21. try {
  22. path = storageclient.uploadFile(inputStream, size, type, null);}catch(Exception e){
  23. e.printStackTrace();
  24. }
  25. if(path!=null) {
  26. return path. getFullPath();}else i
  27. return null;
  28. public boolean deleteFile(string fullPath)
  29. try {
  30. storageClient.deleteFile(fullPath);return true;
  31. }catch(Exception e){
  32. e-printstackTrace(;
  33. }
  34. return false;
  35. }
  36. }

这里,设计了一个多态的uploFile方法,可以使用不同的参数通过调用FastFileStorageClient实现文件上传,同时设计了一个deleteFile方法,实现文件的删除操作。

商品图片上传设计

商品图片上传步骤如下。

首先,设计一个控制器PicUtilController;然后,在这个控制器中实现文件上传的功能,代码如下所示:

  1. @Controller
  2. @RequestMapping("/pic")
  3. public class PicUtilController {
  4. @value("${file.path.head:http://192.168.1.214:84/}")private String pathHead;
  5. GAutowired
  6. private FastefsClient fastefsClient;
  7. //可缩放图片上传
  8. CRequestMap
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/523904
推荐阅读
相关标签
  

闽ICP备14008679号