From 03baddbda18699f5e959b59e622abbf7ea282efe Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Mon, 1 Sep 2025 13:59:18 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=8B=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E5=88=B7=E6=96=B0=E7=9A=84=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/DynamicRouteScheduler.java | 2 +- .../gateway/config/DynamicRouteConfig.java | 86 ++++++++++--------- 2 files changed, 47 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/sczx/gateway/component/DynamicRouteScheduler.java b/src/main/java/com/sczx/gateway/component/DynamicRouteScheduler.java index 03f656d..8c0bdf1 100644 --- a/src/main/java/com/sczx/gateway/component/DynamicRouteScheduler.java +++ b/src/main/java/com/sczx/gateway/component/DynamicRouteScheduler.java @@ -19,7 +19,7 @@ public class DynamicRouteScheduler { private DiscoveryClient discoveryClient; // 延迟5秒后开始执行,避免与启动时的自动刷新冲突,每30秒刷新一次路由(可按需调整) - @Scheduled(fixedRate = 30_000, initialDelay = 5_000) + @Scheduled(fixedRate = 60_000, initialDelay = 10_000) public void refreshRoutes() { log.info("refreshRoutes"); publisher.publishEvent(new RefreshRoutesEvent(this)); diff --git a/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java b/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java index 625189e..bf1f3d0 100644 --- a/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java +++ b/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java @@ -44,47 +44,53 @@ public class DynamicRouteConfig implements RouteDefinitionLocator { @Override public Flux getRouteDefinitions() { long currentTime = System.currentTimeMillis(); - long lastTime = lastRefreshTime.get(); + try{ + long lastTime = lastRefreshTime.get(); - // 防抖处理:如果距离上次刷新时间太短,则不处理 - if (currentTime - lastTime < MIN_REFRESH_INTERVAL && refreshCount.get() > 0) { - log.info("刷新过于频繁,跳过本次刷新"); - return Flux.empty(); - } - lastRefreshTime.set(currentTime); - log.info("开始加载路由定义,第{}次调用", refreshCount.incrementAndGet()); - List routeDefinitions = new ArrayList<>(); - - // 定义需要路由的服务列表 - String[] serviceNames = {"sczx-user", "sczx-store", "sczx-car", "sczx-order", "sczx-sync", "sczx-singlepay"}; - - // 为每个服务添加路由规则(如果服务存在) - for (String serviceName : serviceNames) { - if (hasServiceInstances(serviceName)) { - RouteDefinition routeDefinition = new RouteDefinition(); - routeDefinition.setId(serviceName); - - // 设置路径断言 - routeDefinition.setPredicates(Collections.singletonList( - new PredicateDefinition("Path=/zc/" + serviceName.split("-")[1] + "/**") - )); - - // 设置过滤器 - routeDefinition.setFilters(Collections.singletonList( - new org.springframework.cloud.gateway.filter.FilterDefinition( - "RewritePath=/zc/" + serviceName.split("-")[1] + "/(?.*), /$\\{segment}") - )); - - // 设置URI - routeDefinition.setUri(getServiceUri(serviceName)); - - routeDefinitions.add(routeDefinition); - } else { - log.warn("服务 {} 不存在实例,跳过路由配置", serviceName); + // 防抖处理:如果距离上次刷新时间太短,则不处理 + if (currentTime - lastTime < MIN_REFRESH_INTERVAL && refreshCount.get() > 0) { + log.info("刷新过于频繁,跳过本次刷新"); + return Flux.empty(); } + lastRefreshTime.set(currentTime); + log.info("开始加载路由定义,第{}次调用", refreshCount.incrementAndGet()); + List routeDefinitions = new ArrayList<>(); + + // 定义需要路由的服务列表 + String[] serviceNames = {"sczx-user", "sczx-store", "sczx-car", "sczx-order", "sczx-sync", "sczx-singlepay"}; + + // 为每个服务添加路由规则(如果服务存在) + for (String serviceName : serviceNames) { + if (hasServiceInstances(serviceName)) { + RouteDefinition routeDefinition = new RouteDefinition(); + routeDefinition.setId(serviceName); + + // 设置路径断言 + routeDefinition.setPredicates(Collections.singletonList( + new PredicateDefinition("Path=/zc/" + serviceName.split("-")[1] + "/**") + )); + + // 设置过滤器 + routeDefinition.setFilters(Collections.singletonList( + new org.springframework.cloud.gateway.filter.FilterDefinition( + "RewritePath=/zc/" + serviceName.split("-")[1] + "/(?.*), /$\\{segment}") + )); + + // 设置URI + routeDefinition.setUri(getServiceUri(serviceName)); + + routeDefinitions.add(routeDefinition); + } else { + log.warn("服务 {} 不存在实例,跳过路由配置", serviceName); + } + } + log.info("路由加载完成,共加载 {} 个路由定义", routeDefinitions.size()); + return Flux.fromIterable(routeDefinitions); + }catch (Exception e){ + log.error("路由加载失败", e); } - log.info("路由加载完成,共加载 {} 个路由定义", routeDefinitions.size()); - return Flux.fromIterable(routeDefinitions); + return null; + } /** @@ -114,8 +120,8 @@ public class DynamicRouteConfig implements RouteDefinitionLocator { log.warn("No available instances for service: {}, returning default URI", serviceName); return URI.create("http://localhost"); } - - ServiceInstance selected = instances.get(Math.abs(index.getAndIncrement()) % instances.size()); + int idx = index.getAndIncrement() & Integer.MAX_VALUE; + ServiceInstance selected = instances.get(idx % instances.size()); log.info("Selected instance: {}", selected); return URI.create("http://" + selected.getHost() + ":" + selected.getPort()); } From c43dc3735d9b8e4425a15e911533c456683c0724 Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Mon, 1 Sep 2025 14:13:37 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E7=BD=91=E5=85=B3=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sczx/gateway/config/DynamicRouteConfig.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java b/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java index bf1f3d0..978171f 100644 --- a/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java +++ b/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java @@ -41,6 +41,8 @@ public class DynamicRouteConfig implements RouteDefinitionLocator { // 最小刷新间隔(毫秒) private static final long MIN_REFRESH_INTERVAL = 3000; + private static final URI DEFAULT_URI = URI.create("http://localhost"); + @Override public Flux getRouteDefinitions() { long currentTime = System.currentTimeMillis(); @@ -99,7 +101,9 @@ public class DynamicRouteConfig implements RouteDefinitionLocator { @EventListener public void onRefreshRoutes(RefreshRoutesEvent event) { long count = refreshCount.get(); - log.info("接收到路由刷新事件,当前为第{}次刷新", count); + log.info("接收到路由刷新事件,当前为第{}次刷新, JVM内存使用: {}/{}", count, + Runtime.getRuntime().freeMemory(), + Runtime.getRuntime().totalMemory()); } /** @@ -118,7 +122,7 @@ public class DynamicRouteConfig implements RouteDefinitionLocator { List instances = discoveryClient.getInstances(serviceName); if (instances == null || instances.isEmpty()) { log.warn("No available instances for service: {}, returning default URI", serviceName); - return URI.create("http://localhost"); + return DEFAULT_URI; } int idx = index.getAndIncrement() & Integer.MAX_VALUE; ServiceInstance selected = instances.get(idx % instances.size()); From bf45eb8278fe50597d23564bc476446d0e906c92 Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Mon, 1 Sep 2025 15:43:53 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sczx/gateway/component/DynamicRouteScheduler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/sczx/gateway/component/DynamicRouteScheduler.java b/src/main/java/com/sczx/gateway/component/DynamicRouteScheduler.java index 8c0bdf1..d038b6d 100644 --- a/src/main/java/com/sczx/gateway/component/DynamicRouteScheduler.java +++ b/src/main/java/com/sczx/gateway/component/DynamicRouteScheduler.java @@ -19,7 +19,7 @@ public class DynamicRouteScheduler { private DiscoveryClient discoveryClient; // 延迟5秒后开始执行,避免与启动时的自动刷新冲突,每30秒刷新一次路由(可按需调整) - @Scheduled(fixedRate = 60_000, initialDelay = 10_000) +// @Scheduled(fixedRate = 60_000, initialDelay = 10_000) public void refreshRoutes() { log.info("refreshRoutes"); publisher.publishEvent(new RefreshRoutesEvent(this)); From f260471b52fc6a7eab6c056c0fce533269128520 Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Tue, 2 Sep 2025 16:24:41 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BD=91=E5=85=B3?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 7 +++++-- Jenkinsfile | 6 +++--- .../java/com/sczx/gateway/config/DynamicRouteConfig.java | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index c150597..3279314 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,9 +2,12 @@ FROM openjdk:8-jdk COPY target/*.jar app.jar ENTRYPOINT ["java", "-jar", \ - "-Xms128m", \ - "-Xmx128m", \ + "-Xms256m", \ + "-Xmx256m", \ "-XX:MaxMetaspaceSize=128m", \ "-Xss256k", \ "-XX:+UseContainerSupport", \ + "-Xloggc:/app/gc.log", \ + "-XX:+PrintGCDetails", \ + "-XX:+PrintGCTimeStamps", \ "app.jar"] \ No newline at end of file diff --git a/Jenkinsfile b/Jenkinsfile index 7c8471f..fb2e816 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -69,11 +69,11 @@ pipeline { --name \${CONTAINER_NAME} \ --network sczx-net \ -p 8089:8089 \ - -e JAVA_OPTS="-Xms128m -Xmx256m -Duser.timezone=Asia/Shanghai" \ + -e JAVA_OPTS="-Xms256m -Xmx256m -Duser.timezone=Asia/Shanghai" \ -e TZ=Asia/Shanghai \ -v /etc/localtime:/etc/localtime:ro \ - --memory="300m" \ - --memory-swap="300m" \ + --memory="512m" \ + --memory-swap="512m" \ --restart always \ \${DOCKER_IMAGE} """ diff --git a/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java b/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java index 978171f..84654c4 100644 --- a/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java +++ b/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java @@ -39,7 +39,7 @@ public class DynamicRouteConfig implements RouteDefinitionLocator { private final AtomicReference lastRefreshTime = new AtomicReference<>(0L); // 最小刷新间隔(毫秒) - private static final long MIN_REFRESH_INTERVAL = 3000; + private static final long MIN_REFRESH_INTERVAL = 5000; private static final URI DEFAULT_URI = URI.create("http://localhost"); From 537be209df9f48e030e1031edb37c26605dd01ad Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Tue, 2 Sep 2025 16:32:57 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E9=99=8D=E4=BD=8E=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sczx/gateway/config/DynamicRouteConfig.java | 2 +- src/main/resources/application.yml | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java b/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java index 84654c4..57f8340 100644 --- a/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java +++ b/src/main/java/com/sczx/gateway/config/DynamicRouteConfig.java @@ -39,7 +39,7 @@ public class DynamicRouteConfig implements RouteDefinitionLocator { private final AtomicReference lastRefreshTime = new AtomicReference<>(0L); // 最小刷新间隔(毫秒) - private static final long MIN_REFRESH_INTERVAL = 5000; + private static final long MIN_REFRESH_INTERVAL = 120000; private static final URI DEFAULT_URI = URI.create("http://localhost"); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index a0a6378..6b97db4 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -29,6 +29,7 @@ spring: discovery: server-addr: 115.190.8.52:8848 # Nacos 地址 group: DEFAULT_GROUP + watch-delay: 120000 # 60秒刷新一次 loadbalancer: ribbon: enabled: false @@ -47,8 +48,8 @@ auth: secret-key: his-is-a-very-long-and-secure-secret-key-for-jwt-signing-please-dont-use-short-keys token-expiration: 86400000 # 24小时 -logging: - level: - org.springframework.cloud.gateway: DEBUG - org.springframework.cloud.loadbalancer: DEBUG - reactor.core.publisher: DEBUG +#logging: +# level: +# org.springframework.cloud.gateway: DEBUG +# org.springframework.cloud.loadbalancer: DEBUG +# reactor.core.publisher: DEBUG From 97097a83564fe8a38bd264ec117a787ad23c2e70 Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Tue, 2 Sep 2025 16:58:59 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- Jenkinsfile | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 3279314..4277d31 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ ENTRYPOINT ["java", "-jar", \ "-XX:MaxMetaspaceSize=128m", \ "-Xss256k", \ "-XX:+UseContainerSupport", \ - "-Xloggc:/app/gc.log", \ + "-Xloggc:/app/logs/gc.log", \ "-XX:+PrintGCDetails", \ "-XX:+PrintGCTimeStamps", \ "app.jar"] \ No newline at end of file diff --git a/Jenkinsfile b/Jenkinsfile index fb2e816..d38818a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -72,6 +72,7 @@ pipeline { -e JAVA_OPTS="-Xms256m -Xmx256m -Duser.timezone=Asia/Shanghai" \ -e TZ=Asia/Shanghai \ -v /etc/localtime:/etc/localtime:ro \ + -v /var/log/sczx-gateway:/app/logs \ --memory="512m" \ --memory-swap="512m" \ --restart always \ From ca60cd46a50d072256e22c294c3322fe30284262 Mon Sep 17 00:00:00 2001 From: zhangli <123879394@qq.com> Date: Tue, 2 Sep 2025 17:05:04 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index d38818a..0c9a1de 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -72,7 +72,7 @@ pipeline { -e JAVA_OPTS="-Xms256m -Xmx256m -Duser.timezone=Asia/Shanghai" \ -e TZ=Asia/Shanghai \ -v /etc/localtime:/etc/localtime:ro \ - -v /var/log/sczx-gateway:/app/logs \ + -v /root/log/sczx-gateway:/app/logs \ --memory="512m" \ --memory-swap="512m" \ --restart always \