Skip to main content
  1. Posts/

fastdfs-client获取最新版FastDFS的storage节点时port为0

·67 words·1 min
Blogs Debug Java
Gwen0x4c3
Author
Gwen0x4c3
java n go is my mother tongue

报错:

com.github.tobato.fastdfs.exception.FdfsConnectException: 无法获取服务端连接资源:can’t create connection to/192.168.152.128:0

很明显,他认为我storage的port是0,应该是23000才对。打断点,发现是

com.github.tobato.fastdfs.domain.proto.mapper.FdfsParamMapper将byte[]转为值的时候出的问题,IP的位数在最新版应该为46-1,在StorageNode中ip的max设置成了16-1,因此修改方法有两个:

1、自己修改源码后mvn install

  1. clone一下源码
  2. 修改com.github.tobato.fastdfs.domain.proto.OtherConstants的FDFS_IPADDR_SIZE为46
  3. mvn clean install

2、反射动态修改

修改值的代码如下:

    public static final int NEW_FDFS_IPADDR_SIZE = 46;
    
    @PostConstruct
    public void changePortSize() throws Exception {
        Class<?> storageNodeClass = Class.forName("com.github.tobato.fastdfs.domain.fdfs.StorageNode"); // 替换为实际的类路径
        Field ipField = storageNodeClass.getDeclaredField("ip");
        FdfsColumn fdfsColumnAnnotation = ipField.getAnnotation(FdfsColumn.class);
        InvocationHandler handler = Proxy.getInvocationHandler(fdfsColumnAnnotation);
        Field values = handler.getClass().getDeclaredField("memberValues");
        values.setAccessible(true);
        Map<String, Object> memberValues =(Map<String, Object>) values.get(handler);
        memberValues.put("max", NEW_FDFS_IPADDR_SIZE - 1);
    }

我此处将代码放到了FdfsConfig的@Configuration类中,你也可以直接放启动springboot的main函数里,或者static {}里,反正让这段代码执行就行了