FastDFS - 无法获取服务端连接资源:can‘t create connection to/xx.xx.xx.xx:0

问题描述

根据官方文档 安装完FastDFS服务器后, 服务正常启动,但是在 SpringBoot 项目使用 fastdfs-client 客户端报错无法获取服务端连接资源:can't create connection to/xx.xx.xx.xx:0, 一系列排查发现是获取到的 tracker 端口为 0 。

com.luhuiguo.fastdfs.exception.FdfsConnectException: 无法获取服务端连接资源:can't create connection to/xx.xx.xx.xx:0

	at com.luhuiguo.fastdfs.conn.DefaultConnection.<init>(DefaultConnection.java:52)
	at com.luhuiguo.fastdfs.conn.PooledConnectionFactory.create(PooledConnectionFactory.java:42)
	at com.luhuiguo.fastdfs.conn.PooledConnectionFactory.create(PooledConnectionFactory.java:20)
	at org.apache.commons.pool2.BaseKeyedPooledObjectFactory.makeObject(BaseKeyedPooledObjectFactory.java:60)
	at org.apache.commons.pool2.impl.GenericKeyedObjectPool.create(GenericKeyedObjectPool.java:1064)
	at org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:358)
	at org.apache.commons.pool2.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:281)
	at com.luhuiguo.fastdfs.conn.ConnectionManager.getConnection(ConnectionManager.java:100)
	at com.luhuiguo.fastdfs.conn.ConnectionManager.executeFdfsCmd(ConnectionManager.java:56)
	at com.luhuiguo.fastdfs.service.DefaultFastFileStorageClient.uploadFileAndMetaData(DefaultFastFileStorageClient.java:72)
	at com.luhuiguo.fastdfs.service.DefaultFastFileStorageClient.uploadFile(DefaultFastFileStorageClient.java:41)

环境

组件版本
JDK1.8
TrackerV6.12.1 (可以通过fdfs_trackerd --version 查询)
StorageV6.12.1 (可以通过fdfs_storaged --version 查询)
fastdfs-client0.4.0

解决方案

有问题首先考虑能不能在官方找到解决方案,去 FastDFS 的Git仓库 看一下有没有相同问题的 issue ,找到一条符合情形的描述

在这里插入图片描述

我们可以看到作者有在这个issue下回复,要求使用最新的fastdfs-client ,但是去maven仓库一查,发现最新版本只到 1.27.2 并没有作者要求的1.32版本。

在这里插入图片描述

重写 TrackerClient ,设定默认的 Storage 端口 23000, 如果获取到的端口为 0 时,重置为默认端口 23000(治标不治本,如果服务端修改了strage.conf的端口,那么这个修改就失效了)。

//修复新版 FDFS 获取到的 Storage 端口为 0 的问题
@Primary
@Component("customizeTrackerClient")
public class CustomizeTrackerClient extends DefaultTrackerClient {

    private static final int DEFAULT_PORT = 23000;

    public CustomizeTrackerClient(TrackerConnectionManager trackerConnectionManager) {
        super(trackerConnectionManager);
    }

    public StorageNode getStoreStorage() {
        StorageNode res = super.getStoreStorage();
        res.setPort(getPort(res.getPort()));
        return res;
    }

    public StorageNode getStoreStorage(String groupName) {
        StorageNode res = super.getStoreStorage(groupName);
        res.setPort(getPort(res.getPort()));
        return res;
    }

    public StorageNodeInfo getFetchStorage(String groupName, String filename) {
        StorageNodeInfo res = super.getFetchStorage(groupName, filename);
        res.setPort(getPort(res.getPort()));
        return res;
    }

    public StorageNodeInfo getUpdateStorage(String groupName, String filename) {
        StorageNodeInfo res = super.getUpdateStorage(groupName, filename);
        res.setPort(getPort(res.getPort()));
        return res;
    }

    private int getPort(int port){
        if(port == 0){
            return DEFAULT_PORT;
        }
        return port;
    }
}
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值