From 20630c528377a4bceb3794d236f40f4a4e463618 Mon Sep 17 00:00:00 2001
From: zhangli <123879394@qq.com>
Date: Mon, 7 Jul 2025 01:37:56 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9C=8D=E5=8A=A1=E8=BD=AC?=
=?UTF-8?q?=E5=8F=91=E6=96=B9=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Dockerfile | 2 +-
pom.xml | 31 +++-----------
.../gateway/config/CustomRouteConfig.java | 40 +++++++++++++++++++
.../gateway/config/LoadBalancerConfig.java | 7 ----
.../gateway/controller/TestController.java | 12 +-----
src/main/resources/application.yml | 26 ++++++------
6 files changed, 60 insertions(+), 58 deletions(-)
create mode 100644 src/main/java/com/sczx/gateway/config/CustomRouteConfig.java
delete mode 100644 src/main/java/com/sczx/gateway/config/LoadBalancerConfig.java
diff --git a/Dockerfile b/Dockerfile
index 0cd72e3..c150597 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM openjdk:17-jdk
+FROM openjdk:8-jdk
COPY target/*.jar app.jar
ENTRYPOINT ["java", "-jar", \
diff --git a/pom.xml b/pom.xml
index 0a37e68..17f81c9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,17 +13,17 @@
统一 API 网关服务
- 17
- 2.6.12
- 2021.0.5
- 2021.0.5.0
+ 1.8
+ 2.3.12.RELEASE
+ Hoxton.SR12
+ 2.2.9.RELEASE
org.springframework.boot
spring-boot-starter-parent
- 2.6.12
+ 2.3.12.RELEASE
@@ -70,27 +70,6 @@
spring-cloud-starter-alibaba-nacos-discovery
-
-
- org.springframework.cloud
- spring-cloud-starter-loadbalancer
-
-
- org.springframework.cloud
- spring-cloud-commons
-
-
-
-
-
- com.github.ben-manes.caffeine
- caffeine
-
-
-
- org.springframework.boot
- spring-boot-starter-cache
-
diff --git a/src/main/java/com/sczx/gateway/config/CustomRouteConfig.java b/src/main/java/com/sczx/gateway/config/CustomRouteConfig.java
new file mode 100644
index 0000000..ab51f8b
--- /dev/null
+++ b/src/main/java/com/sczx/gateway/config/CustomRouteConfig.java
@@ -0,0 +1,40 @@
+package com.sczx.gateway.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.springframework.cloud.gateway.route.RouteLocator;
+import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.net.URI;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+@Configuration
+public class CustomRouteConfig {
+ @Autowired
+ private DiscoveryClient discoveryClient;
+
+ private final AtomicInteger index = new AtomicInteger(0);
+
+ @Bean
+ public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
+ return builder.routes()
+ .route("sczx_user", r -> r.path("/zc/user/**")
+ .filters(f -> f.rewritePath("/zc/user/(?.*)", "/${segment}"))
+ .uri(uriWithCustomLoadBalance("sczx_user")))
+ .build();
+ }
+
+ private URI uriWithCustomLoadBalance(String serviceName) {
+ List instances = discoveryClient.getInstances(serviceName);
+ if (instances == null || instances.isEmpty()) {
+ throw new RuntimeException("No available instances for service: " + serviceName);
+ }
+
+ ServiceInstance selected = instances.get(Math.abs(index.getAndIncrement()) % instances.size());
+ return URI.create("http://" + selected.getHost() + ":" + selected.getPort());
+ }
+}
diff --git a/src/main/java/com/sczx/gateway/config/LoadBalancerConfig.java b/src/main/java/com/sczx/gateway/config/LoadBalancerConfig.java
deleted file mode 100644
index dacd4ad..0000000
--- a/src/main/java/com/sczx/gateway/config/LoadBalancerConfig.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.sczx.gateway.config;
-
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class LoadBalancerConfig {
-}
diff --git a/src/main/java/com/sczx/gateway/controller/TestController.java b/src/main/java/com/sczx/gateway/controller/TestController.java
index 1212f54..9f85f63 100644
--- a/src/main/java/com/sczx/gateway/controller/TestController.java
+++ b/src/main/java/com/sczx/gateway/controller/TestController.java
@@ -5,7 +5,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
-import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -17,10 +16,6 @@ public class TestController {
@Autowired
private DiscoveryClient discoveryClient;
-
- @Autowired
- private LoadBalancerClient loadBalancerClient;
-
@GetMapping("/test")
public String test() {
List instances = discoveryClient.getInstances("sczx_user");
@@ -28,11 +23,6 @@ public class TestController {
return "No instances found!";
}
- ServiceInstance instance = loadBalancerClient.choose("sczx_user");
- if (instance == null) {
- return "No instance chosen!";
- }
- log.info("Chosen instance: {}", instance.getUri());
- return "Chosen instance: " + instance.getUri();
+ return "Chosen instance: " + instances.get(0).getUri();
}
}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 279c237..89fb6fe 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -6,19 +6,19 @@ spring:
application:
name: sczx_gateway
cloud:
- gateway:
- discovery:
- locator:
- enabled: true # 开启从注册中心动态获取路由
- lower-case-service-id: true # 服务名转小写
- routes:
- - id: sczx_user
-# uri: http://172.18.0.4:8081
- uri: lb://sczx_user
- predicates:
- - Path=/zc/user/**
- filters:
- - StripPrefix=2
+# gateway:
+# discovery:
+# locator:
+# enabled: true # 开启从注册中心动态获取路由
+# lower-case-service-id: true # 服务名转小写
+# routes:
+# - id: sczx_user
+## uri: http://172.18.0.4:8081
+# uri: lb://sczx_user
+# predicates:
+# - Path=/zc/user/**
+# filters:
+# - StripPrefix=2
nacos:
discovery:
server-addr: 115.190.8.52:8848 # Nacos 地址