From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-gateway/src/main/java/jnpf/handler/FileChunkLoadBalancerHandler.java |   47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 47 insertions(+), 0 deletions(-)

diff --git a/jnpf-gateway/src/main/java/jnpf/handler/FileChunkLoadBalancerHandler.java b/jnpf-gateway/src/main/java/jnpf/handler/FileChunkLoadBalancerHandler.java
new file mode 100644
index 0000000..850a4c1
--- /dev/null
+++ b/jnpf-gateway/src/main/java/jnpf/handler/FileChunkLoadBalancerHandler.java
@@ -0,0 +1,47 @@
+package jnpf.handler;
+
+import cn.dev33.satoken.context.model.SaRequest;
+import jnpf.util.ReactorUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.cloud.client.loadbalancer.DefaultResponse;
+import org.springframework.cloud.client.loadbalancer.EmptyResponse;
+import org.springframework.cloud.client.loadbalancer.Response;
+import org.springframework.util.Assert;
+
+import java.util.List;
+
+/**
+ * 鍚屼竴涓敤鎴蜂笂浼犳枃浠�, 璺敱鑷冲悓涓�鍙版満鍣紝 閬垮厤鍒嗙墖涓婁紶鏂囦欢鍚堝苟澶辫触
+ *
+ * @author JNPF寮�鍙戝钩鍙扮粍
+ * @version V3.5.0
+ * @copyright 寮曡繄淇℃伅鎶�鏈湁闄愬叕鍙革紙https://www.jnpfsoft.com锛�
+ * @date 2024-01-10
+ */
+@Slf4j
+public class FileChunkLoadBalancerHandler implements ILoadBalancerHandler{
+    @Override
+    public boolean isSupport(String serviceId, String uri) {
+        return uri.endsWith("/chunk") || uri.endsWith("/merge");
+    }
+
+    @Override
+    public Response<ServiceInstance> choose(String serviceId, List<ServiceInstance> serviceInstances, SaRequest request) {
+        //鏍规嵁鐢ㄦ埛TOKEN璺敱
+//        String routerKey = SaHolder.getRequest().getHeader(Constants.AUTHORIZATION);
+//        if(StringUtil.isEmpty(routerKey)) {
+//            routerKey = ReactorUtil.getIpAddr();
+//        }
+        //鏍规嵁鏉ヨIP杞
+        String routerKey = ReactorUtil.getIpAddr(request);
+        int hash = Math.max(routerKey.hashCode() % serviceInstances.size(), 0);
+        ServiceInstance serviceInstance = serviceInstances.get(hash);
+        if(serviceInstance == null){
+            log.error("鑾峰彇鍒嗙墖鏈嶅姟涓虹┖锛歿}, {}, {}", serviceId, hash, serviceInstances);
+            return new EmptyResponse();
+        }
+        log.debug("file chunk route to: {}", serviceInstance.getInstanceId());
+        return new DefaultResponse(serviceInstance);
+    }
+}

--
Gitblit v1.8.0