FastDFS客户端多线程上传文件问题

    在项目中用到FastDFS,用来存图片,刚开始单线程进行测试,所以没什么问题,但是在多个客户端进行上传后,发现经常性的会报一下错误:


FastDFS多线程经常性会遇到这样的问题,这是因为FastDFS本身提供的是简单的客户端上传代码,源码中没有包含连接池,线程测试的代码如下:

(1)多线程下载测试代码

import edu.fzu.cmp.thirdpackage.fastdfs.FastdfsClient;
public class FastdfsClientTest {
	public static void main(String[] args) {
		for (int i = 0; i < 20; i++) {
			new Thread(new Runnable() {
				public void run() {
					for (int j = 0; j < 6; j++) {
						try {
							String group_name = "group2";
							String remote_filename = "/M00/00/04/O03saVlz_fmAWxyEAAMbzl2LTmk854.tif";
							FastdfsClient.download1(group_name, remote_filename,
									fileName + Thread.currentThread().getId() + j + ".tif");
						} catch (Exception e) {
							e.printStackTrace();
						}
					}

				}

			}).start();
		}
	}
}

(2)多线程上传代码

public static void uploadFile() {
		String[] strings = null;
		StorageClient storageClient = null;
		try {
			String configFilePath = "fdfs_client.conf";
			ClientGlobal.init(configFilePath);
			TrackerClient trackerClient = new TrackerClient();
			TrackerServer trackerServer = trackerClient.getConnection();
			StorageServer storageServer = null;
			storageClient = new StorageClient(trackerServer, storageServer);
		} catch (Exception e) {
			e.printStackTrace();
		}
		try {
			strings = storageClient.upload_file("D:\\图片\\1.tif", "tif", null);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (MyException e) {
			e.printStackTrace();
		}
		System.out.println(strings[0] + "/" + strings[1]);
	}
public static void main(String[] args) {
		// 多线程插入测试
		ExecutorService fixedThreadPool = Executors.newFixedThreadPool(10);
		for (int i = 0; i < 10; i++) {
			final int index = i;
			fixedThreadPool.execute(new Runnable() {
				public void run() {
					MutiInsert.uploadFile();
				}
			});
		}
	}

         这主要是因为FastDFS只提供了简单的上传方法,并不支持多个客户端,如果需要用到多线程上传需要自己实现连接池,在github上下载了FastDFS的连接池,但是一般的连接池只是提供上传和删除的方法,并不会提供查询的方法,经过google发现FastDFS的图片下载可以通过Nginx方式进行,而不仅仅通过Java客户端的,这样并发量就转到nginx中。

通过以上的方式就能实现多线程上传、删除和查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值