From b8d679c660778357914016c8dffe25dd1f056425 Mon Sep 17 00:00:00 2001
From: a852203465 <852203465@qq.com>
Date: Sun, 24 Jan 2021 17:07:24 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E5=A4=84=E7=90=86fastdfs=E6=9C=8D=E5=8A=A1?=
=?UTF-8?q?=E7=AB=AF=E4=BD=BF=E7=94=A8docker=E5=AE=B9=E5=99=A8=E7=BD=91?=
=?UTF-8?q?=E7=BB=9C=E9=83=A8=E7=BD=B2=E6=97=B6=EF=BC=8C=E5=AE=A2=E6=88=B7?=
=?UTF-8?q?=E7=AB=AF=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E6=8A=A5=E9=94=99?=
=?UTF-8?q?=EF=BC=88=E6=8F=90=E7=A4=BA=E6=89=BE=E4=B8=8D=E5=88=B0=E5=AD=98?=
=?UTF-8?q?=E5=82=A8=E8=8A=82=E7=82=B9=EF=BC=89=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 12 ++
.../tobato/fastdfs/FdfsClientConstants.java | 7 ++
.../domain/fdfs/StorageNodeConfig.java | 44 +++++++
.../fastdfs/domain/fdfs/StorageNodeReal.java | 61 ++++++++++
.../fastdfs/service/DefaultTrackerClient.java | 112 ++++++++++++++++--
5 files changed, 228 insertions(+), 8 deletions(-)
create mode 100644 src/main/java/com/github/tobato/fastdfs/domain/fdfs/StorageNodeConfig.java
create mode 100644 src/main/java/com/github/tobato/fastdfs/domain/fdfs/StorageNodeReal.java
diff --git a/pom.xml b/pom.xml
index 6499141..dfb2870 100644
--- a/pom.xml
+++ b/pom.xml
@@ -285,5 +285,17 @@
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.22.2
+
+ true
+
+
+
+
diff --git a/src/main/java/com/github/tobato/fastdfs/FdfsClientConstants.java b/src/main/java/com/github/tobato/fastdfs/FdfsClientConstants.java
index f2774e7..d931d01 100644
--- a/src/main/java/com/github/tobato/fastdfs/FdfsClientConstants.java
+++ b/src/main/java/com/github/tobato/fastdfs/FdfsClientConstants.java
@@ -31,4 +31,11 @@ private FdfsClientConstants() {
*/
public static final String POOL_CONFIG_PREFIX = "fdfs.pool";
+ /**
+ * 存储节点配置
+ */
+ public static final String STORAGE_CONFIG_PREFIX = "fdfs.storage-node";
+
+
+
}
diff --git a/src/main/java/com/github/tobato/fastdfs/domain/fdfs/StorageNodeConfig.java b/src/main/java/com/github/tobato/fastdfs/domain/fdfs/StorageNodeConfig.java
new file mode 100644
index 0000000..d070960
--- /dev/null
+++ b/src/main/java/com/github/tobato/fastdfs/domain/fdfs/StorageNodeConfig.java
@@ -0,0 +1,44 @@
+package com.github.tobato.fastdfs.domain.fdfs;
+
+import com.github.tobato.fastdfs.FdfsClientConstants;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 存储节点配置参数
+ * @author Rong.Jia
+ * @date 2021/01/24 10:38
+ */
+@Component
+@ConfigurationProperties(prefix = FdfsClientConstants.STORAGE_CONFIG_PREFIX)
+public class StorageNodeConfig {
+
+ /***
+ * storage real IP and port mapping to proxy IP and port
+ *
+ * 格式:
+ * (yml文件)
+ * group0:
+ * 172.10.0.3-23000: 192.168.130.14-23000
+ * 172.10.0.4-23000: 192.168.130.13-23000
+ *
+ *
+ */
+ private Map> ipMapping;
+
+ public Map> getIpMapping() {
+ return ipMapping;
+ }
+
+ public void setIpMapping(Map> ipMapping) {
+ this.ipMapping = ipMapping;
+ }
+
+
+}
diff --git a/src/main/java/com/github/tobato/fastdfs/domain/fdfs/StorageNodeReal.java b/src/main/java/com/github/tobato/fastdfs/domain/fdfs/StorageNodeReal.java
new file mode 100644
index 0000000..865e0ca
--- /dev/null
+++ b/src/main/java/com/github/tobato/fastdfs/domain/fdfs/StorageNodeReal.java
@@ -0,0 +1,61 @@
+package com.github.tobato.fastdfs.domain.fdfs;
+
+import java.io.Serializable;
+
+/**
+ * 节点的 真实IP,端口信息
+ * @author Rong.Jia
+ * @date 2021/01/24 12:56
+ */
+public class StorageNodeReal implements Serializable {
+
+ private static final long serialVersionUID = 6856298300479910590L;
+
+ /**
+ * IP
+ */
+ private String ip;
+
+ /**
+ * 端口
+ */
+ private Integer port;
+
+ /**
+ * 组名
+ */
+ private String groupName;
+
+ public String getIp() {
+ return ip;
+ }
+
+ public void setIp(String ip) {
+ this.ip = ip;
+ }
+
+ public Integer getPort() {
+ return port;
+ }
+
+ public void setPort(Integer port) {
+ this.port = port;
+ }
+
+ public String getGroupName() {
+ return groupName;
+ }
+
+ public void setGroupName(String groupName) {
+ this.groupName = groupName;
+ }
+
+ @Override
+ public String toString() {
+ return "StorageNodeReal{" +
+ "ip='" + ip + '\'' +
+ ", port=" + port +
+ ", groupName='" + groupName + '\'' +
+ '}';
+ }
+}
diff --git a/src/main/java/com/github/tobato/fastdfs/service/DefaultTrackerClient.java b/src/main/java/com/github/tobato/fastdfs/service/DefaultTrackerClient.java
index d4895de..ada12be 100644
--- a/src/main/java/com/github/tobato/fastdfs/service/DefaultTrackerClient.java
+++ b/src/main/java/com/github/tobato/fastdfs/service/DefaultTrackerClient.java
@@ -1,16 +1,23 @@
package com.github.tobato.fastdfs.service;
+import com.github.tobato.fastdfs.domain.conn.FdfsConnectionManager;
import com.github.tobato.fastdfs.domain.conn.TrackerConnectionManager;
-import com.github.tobato.fastdfs.domain.fdfs.GroupState;
-import com.github.tobato.fastdfs.domain.fdfs.StorageNode;
-import com.github.tobato.fastdfs.domain.fdfs.StorageNodeInfo;
-import com.github.tobato.fastdfs.domain.fdfs.StorageState;
+import com.github.tobato.fastdfs.domain.fdfs.*;
import com.github.tobato.fastdfs.domain.proto.tracker.*;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+import java.lang.reflect.Field;
+import java.util.Arrays;
import java.util.List;
+import java.util.Map;
/**
* 目录服务客户端默认实现
@@ -20,16 +27,24 @@
@Service
public class DefaultTrackerClient implements TrackerClient {
+ /**
+ * 日志
+ */
+ protected static final Logger LOGGER = LoggerFactory.getLogger(DefaultTrackerClient.class);
+
@Autowired
private TrackerConnectionManager trackerConnectionManager;
+ @Autowired
+ private StorageNodeConfig storageNodeConfig;
+
/**
* 获取存储节点
*/
@Override
public StorageNode getStoreStorage() {
TrackerGetStoreStorageCommand command = new TrackerGetStoreStorageCommand();
- return trackerConnectionManager.executeFdfsTrackerCmd(command);
+ return getStorageNode(trackerConnectionManager.executeFdfsTrackerCmd(command));
}
/**
@@ -44,7 +59,7 @@ public StorageNode getStoreStorage(String groupName) {
command = new TrackerGetStoreStorageCommand(groupName);
}
- return trackerConnectionManager.executeFdfsTrackerCmd(command);
+ return getStorageNode(trackerConnectionManager.executeFdfsTrackerCmd(command));
}
/**
@@ -53,7 +68,7 @@ public StorageNode getStoreStorage(String groupName) {
@Override
public StorageNodeInfo getFetchStorage(String groupName, String filename) {
TrackerGetFetchStorageCommand command = new TrackerGetFetchStorageCommand(groupName, filename, false);
- return trackerConnectionManager.executeFdfsTrackerCmd(command);
+ return getStorageNode(trackerConnectionManager.executeFdfsTrackerCmd(command));
}
/**
@@ -62,7 +77,7 @@ public StorageNodeInfo getFetchStorage(String groupName, String filename) {
@Override
public StorageNodeInfo getUpdateStorage(String groupName, String filename) {
TrackerGetFetchStorageCommand command = new TrackerGetFetchStorageCommand(groupName, filename, true);
- return trackerConnectionManager.executeFdfsTrackerCmd(command);
+ return getStorageNode(trackerConnectionManager.executeFdfsTrackerCmd(command));
}
/**
@@ -101,4 +116,85 @@ public void deleteStorage(String groupName, String storageIpAddr) {
trackerConnectionManager.executeFdfsTrackerCmd(command);
}
+ /**
+ * 获取 存储节点
+ * @param storageNode 存储节点
+ * @return 存储节点信息
+ */
+ private T getStorageNode(T storageNode) {
+
+ Object groupNameObj = getFieldValue(storageNode, "groupName");
+ Object ipObj = getFieldValue(storageNode, "ip");
+ Object portObj = getFieldValue(storageNode, "port");
+
+ if (!ObjectUtils.isEmpty(groupNameObj) && !ObjectUtils.isEmpty(ipObj)
+ && !ObjectUtils.isEmpty(portObj)) {
+ String groupName = String.valueOf(groupNameObj);
+ String ip = String.valueOf(ipObj);
+ Integer port = Integer.parseInt(String.valueOf(portObj));
+
+ StorageNodeReal storageNodeReal = getStorageNodeReal(groupName, ip, port);
+ BeanUtils.copyProperties(storageNodeReal, storageNode);
+ }
+
+ return storageNode;
+ }
+
+ /**
+ * 获取节点真实的IP,端口信息
+ * @param groupName 组名
+ * @param ip IP
+ * @param port 端口
+ * @return 真实的IP, 端口信息
+ */
+ private StorageNodeReal getStorageNodeReal(String groupName, String ip, Integer port) {
+
+ Map> ipMapping = storageNodeConfig.getIpMapping();
+
+ StorageNodeReal storageNodeReal = new StorageNodeReal();
+ storageNodeReal.setGroupName(groupName);
+ storageNodeReal.setIp(ip);
+ storageNodeReal.setPort(port);
+
+ if (MapUtils.isNotEmpty(ipMapping)) {
+ if (ipMapping.containsKey(groupName)) {
+ String host = ip + "-" + port;
+ Map realNode = ipMapping.get(groupName);
+ if (MapUtils.isNotEmpty(realNode) && realNode.containsKey(host)) {
+ String[] node = StringUtils.split(realNode.get(host), "-");
+ storageNodeReal.setIp(node[0]);
+ storageNodeReal.setPort(Integer.parseInt(node[1]));
+ }
+ }
+ }
+
+ return storageNodeReal;
+ }
+
+ private List getFields(Object obj) {
+ return Arrays.asList(obj.getClass().getDeclaredFields());
+ }
+
+ private Object getFieldValue(Object obj, String fieldName) {
+ List fieldList = getFields(obj);
+ for (Field field : fieldList) {
+ if (StringUtils.equalsIgnoreCase(field.getName(), fieldName)) {
+
+ boolean accessFlag = field.isAccessible();
+
+ try {
+ field.setAccessible(Boolean.TRUE);
+ return field.get(obj);
+ } catch (IllegalAccessException e) {
+ LOGGER.error("getFieldValue {}", e.getMessage());
+ }finally {
+ field.setAccessible(accessFlag);
+ }
+ }
+ }
+ return null;
+ }
+
+
+
}
From 9f26c1378e4ccfeb6b2ab4c20ff15014779a6ba8 Mon Sep 17 00:00:00 2001
From: a852203465 <852203465@qq.com>
Date: Sun, 24 Jan 2021 17:10:54 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9readme=E6=96=87=E4=BB=B6?=
=?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=AD=98=E5=82=A8=E8=8A=82=E7=82=B9?=
=?UTF-8?q?=E9=85=8D=E7=BD=AE=E8=AF=B4=E6=98=8E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
readme.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/readme.md b/readme.md
index 7c6b272..5dc3afa 100644
--- a/readme.md
+++ b/readme.md
@@ -114,6 +114,12 @@ Maven依赖为
tracker-list: #TrackerList参数,支持多个
- 192.168.1.105:22122
- 192.168.1.106:22122
+ storage-node: # 存储节点,处理FASTDFS内网STORAGE IP 映射问题
+ ip-mapping:
+ group1:
+ 172.30.0.1-23000: 192.168.178.128-23000
+ group2:
+ 172.30.0.1-23001: 192.168.178.128-23001
### 4.连接池的管理参数