From 0774e52cc912c3432aaa388be9af4b4f84e3c801 Mon Sep 17 00:00:00 2001 From: tanghc Date: Thu, 2 Jan 2020 10:11:27 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96context-path=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/docs/files/90100_常见问题.md | 13 ++++++++++++- .../sop/gatewaycommon/bean/SopConstants.java | 2 ++ .../manager/ServiceRoutesLoader.java | 7 ++++--- .../route/BaseServiceListener.java | 2 +- .../gatewaycommon/route/RegistryMetadata.java | 17 +++++++++++++++++ .../route/ServiceRouteListener.java | 4 ++-- .../listener/ServiceDocListener.java | 4 ++-- 7 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/RegistryMetadata.java diff --git a/doc/docs/files/90100_常见问题.md b/doc/docs/files/90100_常见问题.md index 9399505a..65b54b8f 100644 --- a/doc/docs/files/90100_常见问题.md +++ b/doc/docs/files/90100_常见问题.md @@ -108,7 +108,18 @@ ribbon.ReadTimeout: 60000 微服务项目定义了`server.servlet.context-path=/story-service`,同时必须指定: ```properties -spring.cloud.nacos.discovery.metadata.server.servlet.context-path=${server.servlet.context-path} +spring.cloud.nacos.discovery.metadata.context-path=${server.servlet.context-path} +``` + +yml配置如下: + +```yaml +spring: + cloud: + nacos: + discovery: + metadata: + context-path: ${server.servlet.context-path} ``` 不然网关无法拉取路由信息 diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/bean/SopConstants.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/bean/SopConstants.java index 54a2fd60..fa09436f 100644 --- a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/bean/SopConstants.java +++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/bean/SopConstants.java @@ -24,6 +24,8 @@ public class SopConstants { public static final String METADATA_SERVER_CONTEXT_PATH = "server.servlet.context-path"; + public static final String METADATA_SERVER_CONTEXT_PATH_COMPATIBILITY = "context-path"; + /** * 在拦截器中调用获取参数: * String cachedBody = (String)exchange.getAttribute(SopConstants.CACHE_REQUEST_BODY_OBJECT_KEY); 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 1391bfa7..e825925f 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.SopConstants; import com.gitee.sop.gatewaycommon.bean.TargetRoute; +import com.gitee.sop.gatewaycommon.route.RegistryMetadata; import com.gitee.sop.gatewaycommon.route.RegistryListener; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; @@ -39,7 +40,7 @@ import java.util.Objects; */ @Deprecated @Slf4j -public class ServiceRoutesLoader { +public class ServiceRoutesLoader implements RegistryMetadata { private static final String SOP_ROUTES_PATH = "/sop/routes"; @@ -140,7 +141,7 @@ public class ServiceRoutesLoader { * @param instance 服务实例 * @return 返回最终url */ - private static String getRouteRequestUrl(Instance instance) { + private String getRouteRequestUrl(Instance instance) { Map metadata = instance.getMetadata(); String customPath = metadata.get(METADATA_SOP_ROUTES_PATH); String homeUrl; @@ -158,7 +159,7 @@ public class ServiceRoutesLoader { } else { // 默认处理 homeUrl = getHomeUrl(instance); - String contextPath = metadata.getOrDefault(SopConstants.METADATA_SERVER_CONTEXT_PATH, ""); + String contextPath = this.getContextPath(metadata); servletPath = contextPath + SOP_ROUTES_PATH; } if (StringUtils.isNotBlank(servletPath) && !servletPath.startsWith("/")) { diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/BaseServiceListener.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/BaseServiceListener.java index cb1f5339..0ec8e5ac 100644 --- a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/BaseServiceListener.java +++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/BaseServiceListener.java @@ -8,7 +8,7 @@ import org.springframework.web.client.RestTemplate; /** * @author tanghc */ -public abstract class BaseServiceListener implements ServiceListener { +public abstract class BaseServiceListener implements ServiceListener, RegistryMetadata { private static final String SECRET = "a3d9sf!1@odl90zd>fkASwq"; diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/RegistryMetadata.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/RegistryMetadata.java new file mode 100644 index 00000000..82e5f58a --- /dev/null +++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/RegistryMetadata.java @@ -0,0 +1,17 @@ +package com.gitee.sop.gatewaycommon.route; + +import com.gitee.sop.gatewaycommon.bean.SopConstants; + +import java.util.Map; + +/** + * @author tanghc + */ +public interface RegistryMetadata { + + default String getContextPath(Map metadata) { + return metadata.getOrDefault(SopConstants.METADATA_SERVER_CONTEXT_PATH + , metadata.getOrDefault(SopConstants.METADATA_SERVER_CONTEXT_PATH_COMPATIBILITY, "")); + } + +} diff --git a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/ServiceRouteListener.java b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/ServiceRouteListener.java index 5c7b0a80..c4db5311 100644 --- a/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/ServiceRouteListener.java +++ b/sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/ServiceRouteListener.java @@ -70,7 +70,7 @@ public class ServiceRouteListener extends BaseServiceListener { * @param instance 服务实例 * @return 返回最终url */ - private static String getRouteRequestUrl(InstanceDefinition instance) { + private String getRouteRequestUrl(InstanceDefinition instance) { Map metadata = instance.getMetadata(); String customPath = metadata.get(METADATA_SOP_ROUTES_PATH); String homeUrl; @@ -88,7 +88,7 @@ public class ServiceRouteListener extends BaseServiceListener { } else { // 默认处理 homeUrl = getHomeUrl(instance); - String contextPath = metadata.getOrDefault(SopConstants.METADATA_SERVER_CONTEXT_PATH, ""); + String contextPath = this.getContextPath(metadata); servletPath = contextPath + SOP_ROUTES_PATH; } if (StringUtils.isNotBlank(servletPath) && !servletPath.startsWith("/")) { diff --git a/sop-website/src/main/java/com/gitee/sop/websiteserver/listener/ServiceDocListener.java b/sop-website/src/main/java/com/gitee/sop/websiteserver/listener/ServiceDocListener.java index 9583c7c7..0f270a78 100644 --- a/sop-website/src/main/java/com/gitee/sop/websiteserver/listener/ServiceDocListener.java +++ b/sop-website/src/main/java/com/gitee/sop/websiteserver/listener/ServiceDocListener.java @@ -44,9 +44,9 @@ public class ServiceDocListener extends BaseServiceListener { } } - private static String getRouteRequestUrl(InstanceDefinition instance) { + private String getRouteRequestUrl(InstanceDefinition instance) { String query = buildQuery(SECRET); - String contextPath = instance.getMetadata().getOrDefault(SopConstants.METADATA_SERVER_CONTEXT_PATH, ""); + String contextPath = this.getContextPath(instance.getMetadata()); return "http://" + instance.getIp() + ":" + instance.getPort() + contextPath + "/v2/api-docs" + query; } }