Commit 371eff46 by Nepxion

增加TraceId传递功能

parent e74d61b1
......@@ -16,7 +16,7 @@ import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -58,16 +58,18 @@ public class FeignStrategyInterceptor implements RequestInterceptor {
return;
}
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 (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);
}
}
if (StringUtils.isNotEmpty(traceId)) {
requestTemplate.header(DiscoveryConstant.TRACE_ID, traceId);
}
while (headerNames.hasMoreElements()) {
......@@ -75,7 +77,9 @@ public class FeignStrategyInterceptor implements RequestInterceptor {
String header = previousRequest.getHeader(headerName);
if (requestHeaders.contains(headerName.toLowerCase())) {
requestTemplate.header(headerName, header);
if (!StringUtils.equals(headerName, DiscoveryConstant.TRACE_ID)) {
requestTemplate.header(headerName, header);
}
}
}
}
......
......@@ -63,16 +63,18 @@ public class RestTemplateStrategyInterceptor implements ClientHttpRequestInterce
HttpHeaders headers = request.getHeaders();
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 (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);
}
}
if (StringUtils.isNotEmpty(traceId)) {
headers.add(DiscoveryConstant.TRACE_ID, traceId);
}
while (headerNames.hasMoreElements()) {
......@@ -80,7 +82,9 @@ public class RestTemplateStrategyInterceptor implements ClientHttpRequestInterce
String header = previousRequest.getHeader(headerName);
if (requestHeaders.contains(headerName.toLowerCase())) {
headers.add(headerName, header);
if (!StringUtils.equals(headerName, DiscoveryConstant.TRACE_ID)) {
headers.add(headerName, header);
}
}
}
......
......@@ -89,6 +89,6 @@ spring.boot.admin.client.url=http://localhost:5555
# 用户自定义和编程灰度路由策略的时候,对RPC方法调用拦截的时候,需要指定对业务Controller类的扫描路径,以便传递上下文对象。该项配置只对服务有效,对网关无效。缺失则默认关闭该功能
spring.application.strategy.scan.packages=com.nepxion.discovery.plugin.example.service.feign
# 用户自定义和编程灰度路由策略的时候,对REST调用拦截的时候(支持Feign或者RestTemplate调用),需要把来自外部的指定Header参数传递到服务里,如果多个用“;”分隔,不允许出现空格。该项配置只对服务有效,对网关无效。缺失则默认关闭该功能
spring.application.strategy.request.headers=version;region;token
spring.application.strategy.request.headers=traceId;version;region;token
# 开启服务端实现Hystrix线程隔离模式做服务隔离时,必须把spring.application.strategy.hystrix.threadlocal.supported设置为true,同时要引入discovery-plugin-strategy-starter-hystrix包,否则线程切换时会发生ThreadLocal上下文对象丢失
# 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