From cbf585593d0f217f0152f8f01ac8a28a8ee28aa3 Mon Sep 17 00:00:00 2001 From: shedfreewu Date: Tue, 15 Jul 2025 15:53:12 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BD=91=E5=85=B3=E6=94=AF=E6=8C=81=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E6=9C=AC=E5=9C=B0=E6=96=87=E4=BB=B6=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gateway/context/GatewayConsulRepo.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-gateway-plugin/src/main/java/com/tencent/cloud/plugin/gateway/context/GatewayConsulRepo.java b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-gateway-plugin/src/main/java/com/tencent/cloud/plugin/gateway/context/GatewayConsulRepo.java index 4e4da3cef..02118c36d 100644 --- a/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-gateway-plugin/src/main/java/com/tencent/cloud/plugin/gateway/context/GatewayConsulRepo.java +++ b/spring-cloud-tencent-plugin-starters/spring-cloud-starter-tencent-gateway-plugin/src/main/java/com/tencent/cloud/plugin/gateway/context/GatewayConsulRepo.java @@ -18,8 +18,10 @@ package com.tencent.cloud.plugin.gateway.context; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URI; import java.util.ArrayList; @@ -63,6 +65,7 @@ import com.tencent.tsf.gateway.core.model.PathWildcardRule; import com.tencent.tsf.gateway.core.model.PluginInstanceInfoResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import shade.polaris.org.apache.commons.io.IOUtils; import org.springframework.cloud.gateway.event.RefreshRoutesEvent; import org.springframework.cloud.gateway.filter.FilterDefinition; @@ -126,6 +129,10 @@ public class GatewayConsulRepo { if (listResponse.getValue() != null) { refreshGatewayGroupConfig(parseGroupResponse(listResponse)); } + else { + logger.info("try to load gateway group config from local file."); + refreshGatewayGroupConfig(loadResponseFromFile()); + } scheduledExecutorService.scheduleAtFixedRate(() -> { try { @@ -257,6 +264,35 @@ public class GatewayConsulRepo { } + private GatewayAllResult loadResponseFromFile() { + GroupResult groupResult = (GroupResult) readLocalRepo(GatewayConstant.GROUP_FILE_NAME, GroupResult.class); + GroupApiResult groupApiResult = (GroupApiResult) readLocalRepo(GatewayConstant.API_FILE_NAME, GroupApiResult.class); + PathRewriteResult pathRewriteResult = (PathRewriteResult) readLocalRepo(GatewayConstant.PATH_REWRITE_FILE_NAME, PathRewriteResult.class); + PathWildcardResult pathWildcardResult = (PathWildcardResult) readLocalRepo(GatewayConstant.PATH_WILDCARD_FILE_NAME, PathWildcardResult.class); + return new GatewayAllResult(groupResult, groupApiResult, pathRewriteResult, pathWildcardResult); + } + + private Object readLocalRepo(String type, Class repoResultClazz) { + byte[] bytes; + try (FileInputStream fin = new FileInputStream(getRepoStoreFile(type)); InputStreamReader isr = new InputStreamReader(fin)) { + bytes = IOUtils.toByteArray(isr, "utf-8"); + if (bytes == null || bytes.length == 0) { + return null; + } + } + catch (IOException t) { + logger.warn("[readLocalRepo] read group info from file occur exception: {}", t.getMessage()); + return null; + } + try { + return JacksonUtils.deserialize(new String(bytes, "utf-8"), repoResultClazz); + } + catch (Throwable t) { + logger.warn("[readLocalRepo] json serialize data to group occur exception: {}", t.getMessage()); + return null; + } + } + private GatewayAllResult parseGroupResponse(Response> listResponse) { GroupResult groupResult = null; GroupApiResult groupApiResult = new GroupApiResult();