Commit 895fc6e7 by Nepxion

需求不合理,去掉TraceId传递功能

parent 371eff46
...@@ -51,5 +51,4 @@ public class DiscoveryConstant { ...@@ -51,5 +51,4 @@ public class DiscoveryConstant {
public static final String NO = "NO"; public static final String NO = "NO";
public static final String UNKNOWN = "UNKNOWN"; public static final String UNKNOWN = "UNKNOWN";
public static final String EXT = "ext"; public static final String EXT = "ext";
public static final String TRACE_ID = "traceId";
} }
\ No newline at end of file
...@@ -16,24 +16,18 @@ import java.util.Enumeration; ...@@ -16,24 +16,18 @@ import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
import com.nepxion.discovery.common.constant.DiscoveryConstant;
import com.nepxion.discovery.plugin.strategy.service.context.ServiceStrategyContextHolder; import com.nepxion.discovery.plugin.strategy.service.context.ServiceStrategyContextHolder;
import com.nepxion.discovery.plugin.strategy.service.trace.TraceIdGenerator;
public class FeignStrategyInterceptor implements RequestInterceptor { public class FeignStrategyInterceptor implements RequestInterceptor {
private static final Logger LOG = LoggerFactory.getLogger(FeignStrategyInterceptor.class); private static final Logger LOG = LoggerFactory.getLogger(FeignStrategyInterceptor.class);
private String requestHeaders; private String requestHeaders;
@Autowired(required = false)
private TraceIdGenerator traceIdGenerator;
@Autowired @Autowired
private ServiceStrategyContextHolder serviceStrategyContextHolder; private ServiceStrategyContextHolder serviceStrategyContextHolder;
...@@ -58,28 +52,12 @@ public class FeignStrategyInterceptor implements RequestInterceptor { ...@@ -58,28 +52,12 @@ public class FeignStrategyInterceptor implements RequestInterceptor {
return; return;
} }
if (requestHeaders.contains(DiscoveryConstant.TRACE_ID.toLowerCase())) {
String traceId = previousRequest.getHeader(DiscoveryConstant.TRACE_ID);
if (StringUtils.isEmpty(traceId) && traceIdGenerator != null) {
try {
traceId = traceIdGenerator.generate();
} catch (Exception e) {
LOG.error("Generate trace id failed, ignore to set trace id", e);
}
}
if (StringUtils.isNotEmpty(traceId)) {
requestTemplate.header(DiscoveryConstant.TRACE_ID, traceId);
}
}
while (headerNames.hasMoreElements()) { while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement(); String headerName = headerNames.nextElement();
String header = previousRequest.getHeader(headerName); String header = previousRequest.getHeader(headerName);
if (requestHeaders.contains(headerName.toLowerCase())) { if (requestHeaders.contains(headerName.toLowerCase())) {
if (!StringUtils.equals(headerName, DiscoveryConstant.TRACE_ID)) { requestTemplate.header(headerName, header);
requestTemplate.header(headerName, header);
}
} }
} }
} }
......
...@@ -14,7 +14,6 @@ import java.util.Enumeration; ...@@ -14,7 +14,6 @@ import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -25,18 +24,13 @@ import org.springframework.http.client.ClientHttpRequestInterceptor; ...@@ -25,18 +24,13 @@ import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
import com.nepxion.discovery.common.constant.DiscoveryConstant;
import com.nepxion.discovery.plugin.strategy.service.context.ServiceStrategyContextHolder; import com.nepxion.discovery.plugin.strategy.service.context.ServiceStrategyContextHolder;
import com.nepxion.discovery.plugin.strategy.service.trace.TraceIdGenerator;
public class RestTemplateStrategyInterceptor implements ClientHttpRequestInterceptor { public class RestTemplateStrategyInterceptor implements ClientHttpRequestInterceptor {
private static final Logger LOG = LoggerFactory.getLogger(RestTemplateStrategyInterceptor.class); private static final Logger LOG = LoggerFactory.getLogger(RestTemplateStrategyInterceptor.class);
private String requestHeaders; private String requestHeaders;
@Autowired(required = false)
private TraceIdGenerator traceIdGenerator;
@Autowired @Autowired
private ServiceStrategyContextHolder serviceStrategyContextHolder; private ServiceStrategyContextHolder serviceStrategyContextHolder;
...@@ -62,29 +56,12 @@ public class RestTemplateStrategyInterceptor implements ClientHttpRequestInterce ...@@ -62,29 +56,12 @@ public class RestTemplateStrategyInterceptor implements ClientHttpRequestInterce
} }
HttpHeaders headers = request.getHeaders(); HttpHeaders headers = request.getHeaders();
if (requestHeaders.contains(DiscoveryConstant.TRACE_ID.toLowerCase())) {
String traceId = previousRequest.getHeader(DiscoveryConstant.TRACE_ID);
if (StringUtils.isEmpty(traceId) && traceIdGenerator != null) {
try {
traceId = traceIdGenerator.generate();
} catch (Exception e) {
LOG.error("Generate trace id failed, ignore to set trace id", e);
}
}
if (StringUtils.isNotEmpty(traceId)) {
headers.add(DiscoveryConstant.TRACE_ID, traceId);
}
}
while (headerNames.hasMoreElements()) { while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement(); String headerName = headerNames.nextElement();
String header = previousRequest.getHeader(headerName); String header = previousRequest.getHeader(headerName);
if (requestHeaders.contains(headerName.toLowerCase())) { if (requestHeaders.contains(headerName.toLowerCase())) {
if (!StringUtils.equals(headerName, DiscoveryConstant.TRACE_ID)) { headers.add(headerName, header);
headers.add(headerName, header);
}
} }
} }
......
package com.nepxion.discovery.plugin.strategy.service.trace;
/**
* <p>Title: Nepxion Discovery</p>
* <p>Description: Nepxion Discovery</p>
* <p>Copyright: Copyright (c) 2017-2050</p>
* <p>Company: Nepxion</p>
* @author Haojun Ren
* @version 1.0
*/
public interface TraceIdGenerator {
String generate();
}
\ No newline at end of file
...@@ -28,7 +28,6 @@ import com.nepxion.discovery.plugin.example.service.impl.MyRegisterListener; ...@@ -28,7 +28,6 @@ import com.nepxion.discovery.plugin.example.service.impl.MyRegisterListener;
import com.nepxion.discovery.plugin.example.service.impl.MySentinelExceptionHandler; import com.nepxion.discovery.plugin.example.service.impl.MySentinelExceptionHandler;
import com.nepxion.discovery.plugin.example.service.impl.MySentinelFlowRuleParser; import com.nepxion.discovery.plugin.example.service.impl.MySentinelFlowRuleParser;
import com.nepxion.discovery.plugin.example.service.impl.MySubscriber; import com.nepxion.discovery.plugin.example.service.impl.MySubscriber;
import com.nepxion.discovery.plugin.example.service.impl.MyTraceIdGenerator;
import com.nepxion.discovery.plugin.strategy.service.aop.RestTemplateStrategyInterceptor; import com.nepxion.discovery.plugin.strategy.service.aop.RestTemplateStrategyInterceptor;
@SpringBootApplication @SpringBootApplication
...@@ -86,9 +85,4 @@ public class DiscoveryApplicationA1 { ...@@ -86,9 +85,4 @@ public class DiscoveryApplicationA1 {
public MyDiscoveryEnabledStrategy myDiscoveryEnabledStrategy() { public MyDiscoveryEnabledStrategy myDiscoveryEnabledStrategy() {
return new MyDiscoveryEnabledStrategy(); return new MyDiscoveryEnabledStrategy();
} }
@Bean
public MyTraceIdGenerator myTraceIdGenerator() {
return new MyTraceIdGenerator();
}
} }
\ No newline at end of file
...@@ -11,19 +11,13 @@ package com.nepxion.discovery.plugin.example.service.feign; ...@@ -11,19 +11,13 @@ package com.nepxion.discovery.plugin.example.service.feign;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.nepxion.discovery.common.constant.DiscoveryConstant;
import com.nepxion.discovery.plugin.framework.adapter.PluginAdapter; import com.nepxion.discovery.plugin.framework.adapter.PluginAdapter;
import com.nepxion.discovery.plugin.strategy.service.context.ServiceStrategyContextHolder;
public class AbstractFeignImpl { public class AbstractFeignImpl {
@Autowired @Autowired
private PluginAdapter pluginAdapter; private PluginAdapter pluginAdapter;
@Autowired
private ServiceStrategyContextHolder serviceStrategyContextHolder;
public String doInvoke(String value) { public String doInvoke(String value) {
String serviceId = pluginAdapter.getServiceId(); String serviceId = pluginAdapter.getServiceId();
String host = pluginAdapter.getHost(); String host = pluginAdapter.getHost();
...@@ -31,12 +25,6 @@ public class AbstractFeignImpl { ...@@ -31,12 +25,6 @@ public class AbstractFeignImpl {
String version = pluginAdapter.getVersion(); String version = pluginAdapter.getVersion();
String region = pluginAdapter.getRegion(); String region = pluginAdapter.getRegion();
String traceId = null;
ServletRequestAttributes attributes = serviceStrategyContextHolder.getRestAttributes();
if (attributes != null) {
traceId = attributes.getRequest().getHeader(DiscoveryConstant.TRACE_ID);
}
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(value + " -> " + serviceId); stringBuilder.append(value + " -> " + serviceId);
stringBuilder.append("[" + host + ":" + port + "]"); stringBuilder.append("[" + host + ":" + port + "]");
...@@ -46,9 +34,6 @@ public class AbstractFeignImpl { ...@@ -46,9 +34,6 @@ public class AbstractFeignImpl {
if (StringUtils.isNotEmpty(region)) { if (StringUtils.isNotEmpty(region)) {
stringBuilder.append("[Region=" + region + "]"); stringBuilder.append("[Region=" + region + "]");
} }
if (StringUtils.isNotEmpty(traceId)) {
stringBuilder.append("[TraceId=" + traceId + "]");
}
return stringBuilder.toString(); return stringBuilder.toString();
} }
......
package com.nepxion.discovery.plugin.example.service.impl;
/**
* <p>Title: Nepxion Discovery</p>
* <p>Description: Nepxion Discovery</p>
* <p>Copyright: Copyright (c) 2017-2050</p>
* <p>Company: Nepxion</p>
* @author Haojun Ren
* @version 1.0
*/
import java.util.UUID;
import com.nepxion.discovery.plugin.strategy.service.trace.TraceIdGenerator;
public class MyTraceIdGenerator implements TraceIdGenerator {
@Override
public String generate() {
return UUID.randomUUID().toString();
}
}
\ No newline at end of file
...@@ -11,19 +11,13 @@ package com.nepxion.discovery.plugin.example.service.rest; ...@@ -11,19 +11,13 @@ package com.nepxion.discovery.plugin.example.service.rest;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.nepxion.discovery.common.constant.DiscoveryConstant;
import com.nepxion.discovery.plugin.framework.adapter.PluginAdapter; import com.nepxion.discovery.plugin.framework.adapter.PluginAdapter;
import com.nepxion.discovery.plugin.strategy.service.context.ServiceStrategyContextHolder;
public class AbstractRestImpl { public class AbstractRestImpl {
@Autowired @Autowired
private PluginAdapter pluginAdapter; private PluginAdapter pluginAdapter;
@Autowired
private ServiceStrategyContextHolder serviceStrategyContextHolder;
public String doRest(String value) { public String doRest(String value) {
String serviceId = pluginAdapter.getServiceId(); String serviceId = pluginAdapter.getServiceId();
String host = pluginAdapter.getHost(); String host = pluginAdapter.getHost();
...@@ -31,12 +25,6 @@ public class AbstractRestImpl { ...@@ -31,12 +25,6 @@ public class AbstractRestImpl {
String version = pluginAdapter.getVersion(); String version = pluginAdapter.getVersion();
String region = pluginAdapter.getRegion(); String region = pluginAdapter.getRegion();
String traceId = null;
ServletRequestAttributes attributes = serviceStrategyContextHolder.getRestAttributes();
if (attributes != null) {
traceId = attributes.getRequest().getHeader(DiscoveryConstant.TRACE_ID);
}
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(value + " -> " + serviceId); stringBuilder.append(value + " -> " + serviceId);
stringBuilder.append("[" + host + ":" + port + "]"); stringBuilder.append("[" + host + ":" + port + "]");
...@@ -46,9 +34,6 @@ public class AbstractRestImpl { ...@@ -46,9 +34,6 @@ public class AbstractRestImpl {
if (StringUtils.isNotEmpty(region)) { if (StringUtils.isNotEmpty(region)) {
stringBuilder.append("[Region=" + region + "]"); stringBuilder.append("[Region=" + region + "]");
} }
if (StringUtils.isNotEmpty(traceId)) {
stringBuilder.append("[TraceId=" + traceId + "]");
}
return stringBuilder.toString(); return stringBuilder.toString();
} }
......
...@@ -89,6 +89,6 @@ spring.boot.admin.client.url=http://localhost:5555 ...@@ -89,6 +89,6 @@ spring.boot.admin.client.url=http://localhost:5555
# 用户自定义和编程灰度路由策略的时候,对RPC方法调用拦截的时候,需要指定对业务Controller类的扫描路径,以便传递上下文对象。该项配置只对服务有效,对网关无效。缺失则默认关闭该功能 # 用户自定义和编程灰度路由策略的时候,对RPC方法调用拦截的时候,需要指定对业务Controller类的扫描路径,以便传递上下文对象。该项配置只对服务有效,对网关无效。缺失则默认关闭该功能
spring.application.strategy.scan.packages=com.nepxion.discovery.plugin.example.service.feign spring.application.strategy.scan.packages=com.nepxion.discovery.plugin.example.service.feign
# 用户自定义和编程灰度路由策略的时候,对REST调用拦截的时候(支持Feign或者RestTemplate调用),需要把来自外部的指定Header参数传递到服务里,如果多个用“;”分隔,不允许出现空格。该项配置只对服务有效,对网关无效。缺失则默认关闭该功能 # 用户自定义和编程灰度路由策略的时候,对REST调用拦截的时候(支持Feign或者RestTemplate调用),需要把来自外部的指定Header参数传递到服务里,如果多个用“;”分隔,不允许出现空格。该项配置只对服务有效,对网关无效。缺失则默认关闭该功能
spring.application.strategy.request.headers=traceId;version;region;token spring.application.strategy.request.headers=version;region;token
# 开启服务端实现Hystrix线程隔离模式做服务隔离时,必须把spring.application.strategy.hystrix.threadlocal.supported设置为true,同时要引入discovery-plugin-strategy-starter-hystrix包,否则线程切换时会发生ThreadLocal上下文对象丢失 # 开启服务端实现Hystrix线程隔离模式做服务隔离时,必须把spring.application.strategy.hystrix.threadlocal.supported设置为true,同时要引入discovery-plugin-strategy-starter-hystrix包,否则线程切换时会发生ThreadLocal上下文对象丢失
# spring.application.strategy.hystrix.threadlocal.supported=true # spring.application.strategy.hystrix.threadlocal.supported=true
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment