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 地址