From ab7b0bd4c081114fe863d131003eb91c5974ccf2 Mon Sep 17 00:00:00 2001 From: tanghc Date: Mon, 16 Sep 2019 12:05:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E8=87=AA=E5=AE=9A=E4=B9=89=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E6=8B=89=E5=8F=96url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manager/ServiceRoutesLoader.java | 43 +++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/manager/ServiceRoutesLoader.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/manager/ServiceRoutesLoader.java index 87e50b8a..7b39b819 100644 --- a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/manager/ServiceRoutesLoader.java +++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/manager/ServiceRoutesLoader.java @@ -11,6 +11,7 @@ import com.gitee.sop.gatewaycommon.bean.NacosConfigs; import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo; import com.gitee.sop.gatewaycommon.bean.TargetRoute; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties; import org.springframework.context.ApplicationEvent; @@ -34,12 +35,16 @@ import java.util.Objects; @Slf4j public class ServiceRoutesLoader { - private static final String SERVER_CONTEXT_PATH = "server.servlet.context-path"; + private static final String SOP_ROUTES_PATH = "/sop/routes"; private static final String SECRET = "a3d9sf!1@odl90zd>fkASwq"; private static final int FIVE_SECONDS = 1000 * 5; + private static final String METADATA_SERVER_CONTEXT_PATH = "server.servlet.context-path"; + + private static final String METADATA_SOP_ROUTES_PATH = "sop.routes.path"; + @Autowired private NacosDiscoveryProperties nacosDiscoveryProperties; @@ -76,7 +81,6 @@ public class ServiceRoutesLoader { } // subscribe String thisServiceId = nacosDiscoveryProperties.getService(); -// ConfigService configService = nacosConfigProperties.configServiceInstance(); for (ServiceInfo serviceInfo : subscribes) { String serviceName = serviceInfo.getName(); // 如果是本机服务,跳过 @@ -127,10 +131,41 @@ public class ServiceRoutesLoader { } } + /** + * 拉取路由请求url + * @param instance 服务实例 + * @return 返回最终url + */ private static String getRouteRequestUrl(Instance instance) { + Map metadata = instance.getMetadata(); + String customPath = metadata.get(METADATA_SOP_ROUTES_PATH); + String homeUrl; + String servletPath; + // 如果metadata中指定了获取路由的url + if (StringUtils.isNotBlank(customPath)) { + // 自定义完整的url + if (customPath.startsWith("http")) { + homeUrl = customPath; + servletPath = ""; + } else { + homeUrl = getHomeUrl(instance); + servletPath = customPath; + } + } else { + // 默认处理 + homeUrl = getHomeUrl(instance); + String contextPath = metadata.getOrDefault(METADATA_SERVER_CONTEXT_PATH, ""); + servletPath = contextPath + SOP_ROUTES_PATH; + } + if (StringUtils.isNotBlank(servletPath) && !servletPath.startsWith("/")) { + servletPath = '/' + servletPath; + } String query = buildQuery(SECRET); - String contextPath = instance.getMetadata().getOrDefault(SERVER_CONTEXT_PATH, ""); - return "http://" + instance.getIp() + ":" + instance.getPort() + contextPath + "/sop/routes" + query; + return homeUrl + servletPath + query; + } + + private static String getHomeUrl(Instance instance) { + return "http://" + instance.getIp() + ":" + instance.getPort(); } private static String buildQuery(String secret) {