FastDFS-Client Java源码改造为适用Nacos的方式

FastDFS-Client 源码的gitHub 地址:
https://github.com/happyfish100/fastdfs-client-java
这个Client的简单用法可自行去看博客:FastDFSClient集成SpringBoot 基础用法
简单用法主要是根据fdfs_client.conf 配置文件的配置来进行的,这样在打包发布后,配置文件不方便修改,对维护成本也有所增加。所以在这根据FastDFS-Client的源码进行改造,修改为使用application.yml配置文件就行fastdfs的配置,同时将配置文件存在Nacos中,以便后续生产改动服务器地址提供便利。

先看看改造后的工程(这里是做成了微服务的组件,通过加入依赖就可以使用):
在这里插入图片描述
工程的pom.xml如下(最主要的就是fastdfs-client-java 和 commons-pool2)另外的是工程的核心组件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<parent>
		<artifactId>syiti-components</artifactId>
		<groupId>com.syiti.dev</groupId>
		<version>2.0.0</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>

	<artifactId>component-fastdfs</artifactId>

	<dependencies>
		<dependency>
			<groupId>org.csource</groupId>
			<artifactId>fastdfs-client-java</artifactId>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
			</exclusions>
			<version>1.27</version>
		</dependency>
		<dependency>
			<groupId>com.syiti.dev</groupId>
			<artifactId>component-core</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
			<version>2.6.0</version>
		</dependency>
	</dependencies>

</project>

然后在properties包下创建FastdfsProperties配置文件实体类

package com.syiti.dev.component.fastdfs.properties;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;


/**
 * @author LinYoufeng
 * @date 2020-01-03 下午4:05
 */
@Data
@ConfigurationProperties(prefix = "fastdfs")
public class FastdfsProperties {

	/**
	 * 连接超时时间
	 */
	private String connectTimeout = "5";
	/**
	 * 网络超时时间
	 */
	private String networkTimeout = "30";
	/**
	 * 字符集编码
	 */
	private String charset = "UTF-8";
	/**
	 * 是否使用Token
	 */
	private String httpAntiStealToken = "false";
	/**
	 * Token加密密钥
	 */
	private String httpSecretKey = "";
	/**
	 * 跟踪器IP地址,多个使用分号隔开
	 */
	private String httpTrackerHttpPort = "";
	/**
	 * 连接池的连接对象最大个数
	 */
	private String trackerServers = "";
	/**
	 * 连接池的最大空闲对象个数
	 */
	private String connectionPoolMaxTotal = "18";
	/**
	 * 连接池的最小空闲对象个数
	 */
	private String connectionPoolMaxIdle = "18";
	/**
	 * Nginx服务器IP,多个使用分号分割
 	 */
	private String connectionPoolMinIdle = "2";
	/**
	 *  获取连接对象时可忍受的等待时长(毫秒)
	 */
	private String nginxServers = "";

}

创建连接对象工厂类,在factory包下创建StorageClientFactory

package com.syiti.dev.component.fastdfs.factory;

import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;

/**
 * 用于创建连接对象的工厂类
 * @author LinYoufeng
 * @date 2020-01-03 下午4:02
 */
public class StorageClientFactory implements PooledObjectFactory<StorageClient> {

	@Override
	public PooledObject<StorageClient> makeObject() throws Exception {
		TrackerClient client = new TrackerClient();
		TrackerServer server = client.getConnection();
		return new DefaultPooledObject<>(new StorageClient(server, null));
	}

	@Override
	public void destroyObject(PooledObject<StorageClient> p) throws Exception {
		p.getObject().getTrackerServer().close();
	}

	@Override
	public boolean validateObject(PooledObject<StorageClient> p) {
		return false;
	}

	@Override
	public void activateObject(PooledObject<StorageClient> p) throws Exception {

	}

	@Override
	public void passivateObject(PooledObject<StorageClient>
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。 存储节点存储文件,完成文件管理的所有功能:就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。 跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。 为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。 在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。 当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。 FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值