获取context-path优化

2.x
tanghc 5 years ago
parent 0db69a88bf
commit 0774e52cc9
  1. 13
      doc/docs/files/90100_常见问题.md
  2. 2
      sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/bean/SopConstants.java
  3. 7
      sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/manager/ServiceRoutesLoader.java
  4. 2
      sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/BaseServiceListener.java
  5. 17
      sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/RegistryMetadata.java
  6. 4
      sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/ServiceRouteListener.java
  7. 4
      sop-website/src/main/java/com/gitee/sop/websiteserver/listener/ServiceDocListener.java

@ -108,7 +108,18 @@ ribbon.ReadTimeout: 60000
微服务项目定义了`server.servlet.context-path=/story-service`,同时必须指定: 微服务项目定义了`server.servlet.context-path=/story-service`,同时必须指定:
```properties ```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}
``` ```
不然网关无法拉取路由信息 不然网关无法拉取路由信息

@ -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 = "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); * String cachedBody = (String)exchange.getAttribute(SopConstants.CACHE_REQUEST_BODY_OBJECT_KEY);

@ -11,6 +11,7 @@ import com.gitee.sop.gatewaycommon.bean.NacosConfigs;
import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo; import com.gitee.sop.gatewaycommon.bean.ServiceRouteInfo;
import com.gitee.sop.gatewaycommon.bean.SopConstants; import com.gitee.sop.gatewaycommon.bean.SopConstants;
import com.gitee.sop.gatewaycommon.bean.TargetRoute; import com.gitee.sop.gatewaycommon.bean.TargetRoute;
import com.gitee.sop.gatewaycommon.route.RegistryMetadata;
import com.gitee.sop.gatewaycommon.route.RegistryListener; import com.gitee.sop.gatewaycommon.route.RegistryListener;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -39,7 +40,7 @@ import java.util.Objects;
*/ */
@Deprecated @Deprecated
@Slf4j @Slf4j
public class ServiceRoutesLoader<T extends TargetRoute> { public class ServiceRoutesLoader<T extends TargetRoute> implements RegistryMetadata {
private static final String SOP_ROUTES_PATH = "/sop/routes"; private static final String SOP_ROUTES_PATH = "/sop/routes";
@ -140,7 +141,7 @@ public class ServiceRoutesLoader<T extends TargetRoute> {
* @param instance 服务实例 * @param instance 服务实例
* @return 返回最终url * @return 返回最终url
*/ */
private static String getRouteRequestUrl(Instance instance) { private String getRouteRequestUrl(Instance instance) {
Map<String, String> metadata = instance.getMetadata(); Map<String, String> metadata = instance.getMetadata();
String customPath = metadata.get(METADATA_SOP_ROUTES_PATH); String customPath = metadata.get(METADATA_SOP_ROUTES_PATH);
String homeUrl; String homeUrl;
@ -158,7 +159,7 @@ public class ServiceRoutesLoader<T extends TargetRoute> {
} else { } else {
// 默认处理 // 默认处理
homeUrl = getHomeUrl(instance); homeUrl = getHomeUrl(instance);
String contextPath = metadata.getOrDefault(SopConstants.METADATA_SERVER_CONTEXT_PATH, ""); String contextPath = this.getContextPath(metadata);
servletPath = contextPath + SOP_ROUTES_PATH; servletPath = contextPath + SOP_ROUTES_PATH;
} }
if (StringUtils.isNotBlank(servletPath) && !servletPath.startsWith("/")) { if (StringUtils.isNotBlank(servletPath) && !servletPath.startsWith("/")) {

@ -8,7 +8,7 @@ import org.springframework.web.client.RestTemplate;
/** /**
* @author tanghc * @author tanghc
*/ */
public abstract class BaseServiceListener implements ServiceListener { public abstract class BaseServiceListener implements ServiceListener, RegistryMetadata {
private static final String SECRET = "a3d9sf!1@odl90zd>fkASwq"; private static final String SECRET = "a3d9sf!1@odl90zd>fkASwq";

@ -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<String, String> metadata) {
return metadata.getOrDefault(SopConstants.METADATA_SERVER_CONTEXT_PATH
, metadata.getOrDefault(SopConstants.METADATA_SERVER_CONTEXT_PATH_COMPATIBILITY, ""));
}
}

@ -70,7 +70,7 @@ public class ServiceRouteListener extends BaseServiceListener {
* @param instance 服务实例 * @param instance 服务实例
* @return 返回最终url * @return 返回最终url
*/ */
private static String getRouteRequestUrl(InstanceDefinition instance) { private String getRouteRequestUrl(InstanceDefinition instance) {
Map<String, String> metadata = instance.getMetadata(); Map<String, String> metadata = instance.getMetadata();
String customPath = metadata.get(METADATA_SOP_ROUTES_PATH); String customPath = metadata.get(METADATA_SOP_ROUTES_PATH);
String homeUrl; String homeUrl;
@ -88,7 +88,7 @@ public class ServiceRouteListener extends BaseServiceListener {
} else { } else {
// 默认处理 // 默认处理
homeUrl = getHomeUrl(instance); homeUrl = getHomeUrl(instance);
String contextPath = metadata.getOrDefault(SopConstants.METADATA_SERVER_CONTEXT_PATH, ""); String contextPath = this.getContextPath(metadata);
servletPath = contextPath + SOP_ROUTES_PATH; servletPath = contextPath + SOP_ROUTES_PATH;
} }
if (StringUtils.isNotBlank(servletPath) && !servletPath.startsWith("/")) { if (StringUtils.isNotBlank(servletPath) && !servletPath.startsWith("/")) {

@ -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 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; return "http://" + instance.getIp() + ":" + instance.getPort() + contextPath + "/v2/api-docs" + query;
} }
} }

Loading…
Cancel
Save