Support custom trace id in request processing chain #315

This commit is contained in:
hongqiaowei
2021-09-23 12:01:55 +08:00
parent e39f0a82bf
commit ef128e8f13
19 changed files with 122 additions and 65 deletions

View File

@@ -20,6 +20,5 @@
<!-- suppress the warn 'No URLs will be polled as dynamic configuration sources.' -->
<logger name="com.netflix.config.sources.URLConfigurationSource" level="ERROR"/>
<Logger name="we" level="info"/>
</Loggers>
</Configuration>

View File

@@ -69,6 +69,27 @@ public class SystemConfig {
@Value("${route-timeout:0}")
private long routeTimeout = 0;
@Value("${fizz-trace-id.header:X-Trace-Id}")
private String fizzTraceIdHeader;
@Value("${fizz-trace-id.value-strategy:}")
private String fizzTraceIdValueStrategy;
@Value("${fizz-trace-id.value-prefix:}")
private String fizzTraceIdValuePrefix;
public String fizzTraceIdHeader() {
return fizzTraceIdHeader;
}
public String fizzTraceIdValueStrategy() {
return fizzTraceIdValueStrategy;
}
public String fizzTraceIdValuePrefix() {
return fizzTraceIdValuePrefix;
}
public long getRouteTimeout() {
return routeTimeout;
}
@@ -179,8 +200,8 @@ public class SystemConfig {
@PostConstruct
public void afterPropertiesSet() {
afterLogResponseBodySet();
afterLogHeadersSet();
// afterLogResponseBodySet();
// afterLogHeadersSet();
}
private void afterLogResponseBodySet() {
@@ -193,6 +214,9 @@ public class SystemConfig {
Arrays.stream(StringUtils.split(logHeaders, Constants.Symbol.COMMA)).forEach(h -> {
logHeaderSet.add(h);
});
if (!fizzTraceIdHeader.equals("X-Trace-Id")) {
logHeaderSet.add(fizzTraceIdHeader);
}
WebUtils.LOG_HEADER_SET = logHeaderSet;
log.info("log header list: " + logHeaderSet.toString());
}
@@ -216,7 +240,7 @@ public class SystemConfig {
this.updateLogResponseBody(logResponseBody);
}
@Value("${log.headers:x}")
@Value("${log.headers:}")
public void setLogHeaders(String logHeaders) {
if (ObjectUtils.nullSafeEquals(this.logHeaders, logHeaders)) {
return;

View File

@@ -138,11 +138,13 @@ public class AggregateFilter implements WebFilter {
}
// traceId
/*
String tmpTraceId = CommonConstants.TRACE_ID_PREFIX + exchange.getRequest().getId();
if (StringUtils.isNotBlank(request.getHeaders().getFirst(CommonConstants.HEADER_TRACE_ID))) {
tmpTraceId = request.getHeaders().getFirst(CommonConstants.HEADER_TRACE_ID);
}
final String traceId = tmpTraceId;
*/
final String traceId = WebUtils.getTraceId(exchange);
LogService.setBizId(traceId);
LOGGER.debug("matched aggregation api: {}", path);
@@ -207,9 +209,9 @@ public class AggregateFilter implements WebFilter {
// default content-type
serverHttpResponse.getHeaders().add(CommonConstants.HEADER_CONTENT_TYPE, CommonConstants.CONTENT_TYPE_JSON);
}
List<String> headerTraceIds = serverHttpResponse.getHeaders().get(CommonConstants.HEADER_TRACE_ID);
List<String> headerTraceIds = serverHttpResponse.getHeaders().get(systemConfig.fizzTraceIdHeader());
if (headerTraceIds == null || !headerTraceIds.contains(traceId)) {
serverHttpResponse.getHeaders().add(CommonConstants.HEADER_TRACE_ID, traceId);
serverHttpResponse.getHeaders().add(systemConfig.fizzTraceIdHeader(), traceId);
}
long end = System.currentTimeMillis();

View File

@@ -172,7 +172,7 @@ public class CallbackFilter extends FizzWebFilter {
StringBuilder b = ThreadContext.getStringBuilder();
b.append(Constants.Symbol.LEFT_BRACE);
b.append(_id); toJsonStringValue(b, req.getId()); b.append(Constants.Symbol.COMMA);
b.append(_id); toJsonStringValue(b, WebUtils.getTraceId(exchange)); b.append(Constants.Symbol.COMMA);
b.append(_datetime); b.append(System.currentTimeMillis()); b.append(Constants.Symbol.COMMA);
b.append(_origin); toJsonStringValue(b, WebUtils.getOriginIp(exchange)); b.append(Constants.Symbol.COMMA);

View File

@@ -68,30 +68,29 @@ public class FilterExceptionHandlerConfig {
return Mono.empty();
}
}
String rid = WebUtils.getTraceId(exchange);
if (t instanceof ExecuteScriptException) {
ExecuteScriptException ex = (ExecuteScriptException) t;
resp.getHeaders().add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
RespEntity rs = null;
String reqId = exchange.getRequest().getId();
if (ex.getStepContext() != null && ex.getStepContext().returnContext()) {
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), reqId, ex.getStepContext());
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), rid, ex.getStepContext());
return resp.writeWith(Mono.just(resp.bufferFactory().wrap(JacksonUtils.writeValueAsString(rs).getBytes())));
} else {
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), reqId);
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), rid);
return resp.writeWith(Mono.just(resp.bufferFactory().wrap(rs.toString().getBytes())));
}
}
if (t instanceof FizzRuntimeException) {
FizzRuntimeException ex = (FizzRuntimeException) t;
log.error(ex.getMessage(), LogService.BIZ_ID, exchange.getRequest().getId(), ex);
log.error(ex.getMessage(), LogService.BIZ_ID, rid, ex);
resp.getHeaders().add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
RespEntity rs = null;
String reqId = exchange.getRequest().getId();
if (ex.getStepContext() != null && ex.getStepContext().returnContext()) {
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), reqId, ex.getStepContext());
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), rid, ex.getStepContext());
return resp.writeWith(Mono.just(resp.bufferFactory().wrap(JacksonUtils.writeValueAsString(rs).getBytes())));
} else {
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), reqId);
rs = new RespEntity(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), rid);
return resp.writeWith(Mono.just(resp.bufferFactory().wrap(rs.toString().getBytes())));
}
}
@@ -100,8 +99,8 @@ public class FilterExceptionHandlerConfig {
if (fc == null) { // t came from flow control filter
StringBuilder b = ThreadContext.getStringBuilder();
WebUtils.request2stringBuilder(exchange, b);
log.error(b.toString(), LogService.BIZ_ID, exchange.getRequest().getId(), t);
String s = RespEntity.toJson(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), exchange.getRequest().getId());
log.error(b.toString(), LogService.BIZ_ID, rid, t);
String s = RespEntity.toJson(HttpStatus.INTERNAL_SERVER_ERROR.value(), t.getMessage(), rid);
resp.getHeaders().add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
vm = resp.writeWith(Mono.just(resp.bufferFactory().wrap(s.getBytes())));
} else {

View File

@@ -55,7 +55,7 @@ public class FizzLogFilter implements WebFilter {
WebUtils.request2stringBuilder(exchange, b);
b.append(resp).append(exchange.getResponse().getStatusCode())
.append(in) .append(System.currentTimeMillis() - startTime);
LOGGER.info(b.toString(), LogService.BIZ_ID, exchange.getRequest().getId());
LOGGER.info(b.toString(), LogService.BIZ_ID, WebUtils.getTraceId(exchange));
}
}
);

View File

@@ -17,11 +17,6 @@
package we.filter;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -33,7 +28,6 @@ import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilterChain;
import reactor.core.publisher.Mono;
import reactor.core.publisher.SignalType;
import we.config.SystemConfig;
@@ -47,10 +41,11 @@ import we.stats.IncrRequestResult;
import we.stats.ResourceConfig;
import we.stats.ratelimit.ResourceRateLimitConfig;
import we.stats.ratelimit.ResourceRateLimitConfigService;
import we.util.Constants;
import we.util.JacksonUtils;
import we.util.ThreadContext;
import we.util.WebUtils;
import we.util.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @author hongqiaowei
@@ -68,6 +63,8 @@ public class FlowControlFilter extends FizzWebFilter {
private static final String actuator = "actuator";
private static final String uuid = "uuid";
public static final String ADMIN_REQUEST = "$a";
@Resource
@@ -85,6 +82,9 @@ public class FlowControlFilter extends FizzWebFilter {
@Resource
private AppService appService;
@Resource
private SystemConfig systemConfig;
@Override
public Mono<Void> doFilter(ServerWebExchange exchange, WebFilterChain chain) {
@@ -111,10 +111,6 @@ public class FlowControlFilter extends FizzWebFilter {
return WebUtils.buildJsonDirectResponse(exchange, HttpStatus.FORBIDDEN, null, json);
}
String app = WebUtils.getAppId(exchange);
// if (app != null && !appService.getAppMap().containsKey(app)) {
// String json = RespEntity.toJson(HttpStatus.FORBIDDEN.value(), "no app " + app, exchange.getRequest().getId());
// return WebUtils.buildJsonDirectResponse(exchange, HttpStatus.FORBIDDEN, null, json);
// }
path = WebUtils.getClientReqPath(exchange);
String ip = WebUtils.getOriginIp(exchange);
@@ -151,6 +147,7 @@ public class FlowControlFilter extends FizzWebFilter {
} else {
long start = System.currentTimeMillis();
setTraceId(exchange);
return chain.filter(exchange).doFinally(s -> {
long rt = System.currentTimeMillis() - start;
if (s == SignalType.ON_ERROR || exchange.getResponse().getStatusCode().is5xxServerError()) {
@@ -162,9 +159,27 @@ public class FlowControlFilter extends FizzWebFilter {
}
}
setTraceId(exchange);
return chain.filter(exchange);
}
private void setTraceId(ServerWebExchange exchange) {
String traceId = exchange.getRequest().getHeaders().getFirst(systemConfig.fizzTraceIdHeader());
if (StringUtils.isBlank(traceId)) {
if (StringUtils.isBlank(systemConfig.fizzTraceIdValueStrategy())) {
traceId = exchange.getRequest().getId();
} else if (systemConfig.fizzTraceIdValueStrategy().equals(uuid)) {
traceId = UUIDUtil.getUUID();
} else {
throw Utils.runtimeExceptionWithoutStack("unsupported " + systemConfig.fizzTraceIdValueStrategy() + " trace id value strategy!");
}
}
if (StringUtils.isNotBlank(systemConfig.fizzTraceIdValuePrefix())) {
traceId = systemConfig.fizzTraceIdValuePrefix() + traceId;
}
exchange.getAttributes().put(WebUtils.TRACE_ID, traceId);
}
private List<ResourceConfig> getResourceConfigItselfAndParents(ResourceConfig rc, List<ResourceConfig> rcs) {
boolean check = false;
String rcId = rc.getResourceId();

View File

@@ -33,6 +33,7 @@ import org.springframework.web.reactive.function.client.ClientResponse;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilterChain;
import reactor.core.publisher.Mono;
import we.config.SystemConfig;
import we.constants.CommonConstants;
import we.flume.clients.log4j2appender.LogService;
import we.legacy.RespEntity;
@@ -67,6 +68,9 @@ public class RouteFilter extends FizzWebFilter {
@Resource
private ApacheDubboGenericService dubboGenericService;
@Resource
private SystemConfig systemConfig;
@Override
public Mono<Void> doFilter(ServerWebExchange exchange, WebFilterChain chain) {
@@ -77,7 +81,7 @@ public class RouteFilter extends FizzWebFilter {
Mono<Void> resp = WebUtils.getDirectResponse(exchange);
if (resp == null) { // should not reach here
ServerHttpRequest clientReq = exchange.getRequest();
String rid = clientReq.getId();
String rid = WebUtils.getTraceId(exchange);
String msg = pfr.id + " fail";
if (pfr.cause == null) {
log.error(msg, LogService.BIZ_ID, rid);
@@ -94,7 +98,7 @@ public class RouteFilter extends FizzWebFilter {
private Mono<Void> doFilter0(ServerWebExchange exchange, WebFilterChain chain) {
ServerHttpRequest req = exchange.getRequest();
String rid = req.getId();
String rid = WebUtils.getTraceId(exchange);
// ApiConfig ac = WebUtils.getApiConfig(exchange);
Route route = WebUtils.getRoute(exchange);
@@ -133,7 +137,7 @@ public class RouteFilter extends FizzWebFilter {
private Mono<Void> send(ServerWebExchange exchange, HttpMethod method, String service, String relativeUri, HttpHeaders hdrs) {
ServerHttpRequest clientReq = exchange.getRequest();
return fizzWebClient.send2service(clientReq.getId(), method, service, relativeUri, hdrs, clientReq.getBody()).flatMap(genServerResponse(exchange));
return fizzWebClient.send2service(WebUtils.getTraceId(exchange), method, service, relativeUri, hdrs, clientReq.getBody()).flatMap(genServerResponse(exchange));
}
private Function<ClientResponse, Mono<? extends Void>> genServerResponse(ServerWebExchange exchange) {
@@ -160,7 +164,7 @@ public class RouteFilter extends FizzWebFilter {
);
if (log.isDebugEnabled()) {
StringBuilder b = ThreadContext.getStringBuilder();
String rid = exchange.getRequest().getId();
String rid = WebUtils.getTraceId(exchange);
WebUtils.response2stringBuilder(rid, remoteResp, b);
log.debug(b.toString(), LogService.BIZ_ID, rid);
}
@@ -208,7 +212,7 @@ public class RouteFilter extends FizzWebFilter {
}
declaration.setTimeout(t);
Map<String, String> attachments = Collections.singletonMap(CommonConstants.HEADER_TRACE_ID, WebUtils.getTraceId(exchange));
Map<String, String> attachments = Collections.singletonMap(systemConfig.fizzTraceIdHeader(), WebUtils.getTraceId(exchange));
return dubboGenericService.send(parameters, declaration, attachments);
}
)
@@ -225,7 +229,7 @@ public class RouteFilter extends FizzWebFilter {
if (ls[0] != null) {
b.append('\n').append(ls[0]);
}
log.error(b.toString(), LogService.BIZ_ID, exchange.getRequest().getId(), t);
log.error(b.toString(), LogService.BIZ_ID, WebUtils.getTraceId(exchange), t);
}
)
;

View File

@@ -29,6 +29,7 @@ import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
import we.config.SystemConfig;
import we.constants.CommonConstants;
import we.fizz.input.Input;
import we.flume.clients.log4j2appender.LogService;
@@ -54,6 +55,9 @@ public class AggregateService {
@Resource
private ConfigLoader aggregateResourceLoader;
@Resource
private SystemConfig systemConfig;
public Mono<AggregateResult> request(String traceId, String clientReqPathPrefix, String method, String service, String path, MultiValueMap<String, String> queryParams,
HttpHeaders headers, String body) {
@@ -114,9 +118,9 @@ public class AggregateService {
// defalut content-type
clientResp.getHeaders().add("Content-Type", "application/json; charset=UTF-8");
}
List<String> headerTraceIds = clientResp.getHeaders().get(CommonConstants.HEADER_TRACE_ID);
List<String> headerTraceIds = clientResp.getHeaders().get(systemConfig.fizzTraceIdHeader());
if (headerTraceIds == null || !headerTraceIds.contains(traceId)) {
clientResp.getHeaders().add(CommonConstants.HEADER_TRACE_ID, traceId);
clientResp.getHeaders().add(systemConfig.fizzTraceIdHeader(), traceId);
}
// long end = System.currentTimeMillis();
// pipeline.getStepContext().addElapsedTime("总耗时", end - start);

View File

@@ -29,6 +29,8 @@ import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.util.CollectionUtils;
import reactor.core.publisher.Mono;
import we.FizzAppContext;
import we.config.SystemConfig;
import we.constants.CommonConstants;
import we.exception.ExecuteScriptException;
import we.fizz.StepContext;
@@ -79,7 +81,12 @@ public class DubboInput extends RPCInput {
contextAttachment = new HashMap<String, String>(attachments);
}
if (inputContext.getStepContext() != null && inputContext.getStepContext().getTraceId() != null) {
contextAttachment.put(CommonConstants.HEADER_TRACE_ID, inputContext.getStepContext().getTraceId());
if (FizzAppContext.appContext == null) {
contextAttachment.put(CommonConstants.HEADER_TRACE_ID, inputContext.getStepContext().getTraceId());
} else {
SystemConfig systemConfig = FizzAppContext.appContext.getBean(SystemConfig.class);
contextAttachment.put(systemConfig.fizzTraceIdHeader(), inputContext.getStepContext().getTraceId());
}
}
Mono<Object> proxyResponse = proxy.send(body, declaration, contextAttachment);

View File

@@ -24,6 +24,8 @@ import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.util.CollectionUtils;
import reactor.core.publisher.Mono;
import we.FizzAppContext;
import we.config.SystemConfig;
import we.constants.CommonConstants;
import we.exception.ExecuteScriptException;
import we.fizz.StepContext;
@@ -72,7 +74,12 @@ public class GrpcInput extends RPCInput implements IInput {
contextAttachment = new HashMap<String, Object>(attachments);
}
if (inputContext.getStepContext() != null && inputContext.getStepContext().getTraceId() != null) {
contextAttachment.put(CommonConstants.HEADER_TRACE_ID, inputContext.getStepContext().getTraceId());
if (FizzAppContext.appContext == null) {
contextAttachment.put(CommonConstants.HEADER_TRACE_ID, inputContext.getStepContext().getTraceId());
} else {
SystemConfig systemConfig = FizzAppContext.appContext.getBean(SystemConfig.class);
contextAttachment.put(systemConfig.fizzTraceIdHeader(), inputContext.getStepContext().getTraceId());
}
}
Mono<Object> proxyResponse = proxy.send(JSON.toJSONString(body), declaration, contextAttachment);

View File

@@ -360,7 +360,7 @@ public class RequestInput extends RPCInput implements IInput{
}
headers.remove(CommonConstants.HEADER_CONTENT_LENGTH);
headers.add(CommonConstants.HEADER_TRACE_ID, inputContext.getStepContext().getTraceId());
headers.add(systemConfig.fizzTraceIdHeader(), inputContext.getStepContext().getTraceId());
request.put("headers", MapUtil.headerToHashMap(headers));
Object body = null;

View File

@@ -52,7 +52,7 @@ public abstract class PluginFilter implements FizzPluginFilter {
public Mono<Void> filter(ServerWebExchange exchange, Map<String, Object> config, String fixedConfig) {
FilterResult pfr = WebUtils.getPrevFilterResult(exchange);
if (log.isDebugEnabled()) {
log.debug(this + ": " + pfr.id + " execute " + (pfr.success ? "success" : "fail"), LogService.BIZ_ID, exchange.getRequest().getId());
log.debug(this + ": " + pfr.id + " execute " + (pfr.success ? "success" : "fail"), LogService.BIZ_ID, WebUtils.getTraceId(exchange));
}
if (pfr.success) {
return doFilter(exchange, config, fixedConfig);

View File

@@ -289,7 +289,7 @@ public class ApiConfigService {
public Mono<Object> canAccess(ServerWebExchange exchange) {
ServerHttpRequest req = exchange.getRequest();
HttpHeaders hdrs = req.getHeaders();
LogService.setBizId(req.getId());
LogService.setBizId(WebUtils.getTraceId(exchange));
return canAccess(exchange, WebUtils.getAppId(exchange), WebUtils.getOriginIp(exchange), getTimestamp(hdrs), getSign(hdrs),
WebUtils.getClientService(exchange), req.getMethod(), WebUtils.getClientReqPath(exchange));
}

View File

@@ -51,7 +51,7 @@ public class AuthPluginFilter extends PluginFilter {
return apiConfigService.canAccess(exchange).flatMap(
r -> {
if (log.isDebugEnabled()) {
log.debug("req auth: " + r, LogService.BIZ_ID, exchange.getRequest().getId());
log.debug("req auth: " + r, LogService.BIZ_ID, WebUtils.getTraceId(exchange));
}
Map<String, Object> data = Collections.singletonMap(RESULT, r);
return WebUtils.transmitSuccessFilterResultAndEmptyMono(exchange, AUTH_PLUGIN_FILTER, data);

View File

@@ -31,6 +31,7 @@ import we.plugin.FizzPluginFilterChain;
import we.spring.http.server.reactive.ext.FizzServerHttpRequestDecorator;
import we.spring.web.server.ext.FizzServerWebExchangeDecorator;
import we.util.NettyDataBufferUtils;
import we.util.WebUtils;
import java.util.Map;
@@ -69,7 +70,8 @@ public class RequestBodyPlugin implements FizzPluginFilter {
newExchange = new FizzServerWebExchangeDecorator(mutatedExchange);
}
if (log.isDebugEnabled()) {
log.debug(req.getId() + " request is decorated", LogService.BIZ_ID, req.getId());
String traceId = WebUtils.getTraceId(exchange);
log.debug(traceId + " request is decorated", LogService.BIZ_ID, traceId);
}
return FizzPluginFilterChain.next(newExchange);
}

View File

@@ -80,7 +80,7 @@ public class CallbackService {
public Mono<Void> requestBackends(ServerWebExchange exchange, HttpHeaders headers, DataBuffer body, CallbackConfig cc, Map<String, ServiceInstance> service2instMap) {
ServerHttpRequest req = exchange.getRequest();
String reqId = req.getId();
String reqId = WebUtils.getTraceId(exchange);
HttpMethod method = req.getMethod();
if (log.isDebugEnabled()) {
log.debug("service2instMap: " + JacksonUtils.writeValueAsString(service2instMap), LogService.BIZ_ID, reqId);
@@ -153,7 +153,7 @@ public class CallbackService {
StringBuilder b = ThreadContext.getStringBuilder();
WebUtils.request2stringBuilder(exchange, b);
b.append(Constants.Symbol.LINE_SEPARATOR).append(callback).append(Constants.Symbol.LINE_SEPARATOR);
String id = exchange.getRequest().getId();
String id = WebUtils.getTraceId(exchange);
WebUtils.request2stringBuilder(id, method, r.service + Constants.Symbol.FORWARD_SLASH + r.path, headers, body, b);
log.error(b.toString(), LogService.BIZ_ID, id, t);
}
@@ -195,7 +195,7 @@ public class CallbackService {
);
if (log.isDebugEnabled()) {
StringBuilder b = ThreadContext.getStringBuilder();
String rid = exchange.getRequest().getId();
String rid = WebUtils.getTraceId(exchange);
WebUtils.response2stringBuilder(rid, remoteResp, b);
log.debug(b.toString(), LogService.BIZ_ID, rid);
}

View File

@@ -76,14 +76,14 @@ public abstract class WebUtils {
private static final String clientRequestQuery = "@crq";
private static final String traceId = "traceId";
private static String gatewayPrefix = SystemConfig.DEFAULT_GATEWAY_PREFIX;
private static List<String> appHeaders = Stream.of("fizz-appid").collect(Collectors.toList());
private static final String app = "app";
public static final String TRACE_ID = "@traid";
public static final String BACKEND_SERVICE = "@bs";
public static final String FILTER_CONTEXT = "@fc";
@@ -417,7 +417,7 @@ public abstract class WebUtils {
public static void request2stringBuilder(ServerWebExchange exchange, StringBuilder b) {
ServerHttpRequest req = exchange.getRequest();
request2stringBuilder(req.getId(), req.getMethod(), req.getURI().toString(), req.getHeaders(), null, b);
request2stringBuilder(WebUtils.getTraceId(exchange), req.getMethod(), req.getURI().toString(), req.getHeaders(), null, b);
}
public static void request2stringBuilder(String reqId, HttpMethod method, String uri, HttpHeaders headers, Object body, StringBuilder b) {
@@ -470,7 +470,7 @@ public abstract class WebUtils {
// }
// );
// }
String rid = exchange.getRequest().getId();
String rid = getTraceId(exchange);
// Schedulers.parallel().schedule(() -> {
StringBuilder b = ThreadContext.getStringBuilder();
request2stringBuilder(exchange, b);
@@ -524,7 +524,7 @@ public abstract class WebUtils {
@Deprecated
public static Mono<Void> responseErrorAndBindContext(ServerWebExchange exchange, String filter, HttpStatus httpStatus) {
ServerHttpResponse response = exchange.getResponse();
String rid = exchange.getRequest().getId();
String rid = getTraceId(exchange);
StringBuilder b = ThreadContext.getStringBuilder();
request2stringBuilder(exchange, b);
b.append(Constants.Symbol.LINE_SEPARATOR);
@@ -538,7 +538,7 @@ public abstract class WebUtils {
public static Mono<Void> responseErrorAndBindContext(ServerWebExchange exchange, String filter, HttpStatus httpStatus,
HttpHeaders headers, String content) {
ServerHttpResponse response = exchange.getResponse();
String rid = exchange.getRequest().getId();
String rid = getTraceId(exchange);
StringBuilder b = ThreadContext.getStringBuilder();
request2stringBuilder(exchange, b);
b.append(Constants.Symbol.LINE_SEPARATOR);
@@ -571,15 +571,9 @@ public abstract class WebUtils {
}
public static String getTraceId(ServerWebExchange exchange) {
String id = exchange.getAttribute(traceId);
String id = exchange.getAttribute(TRACE_ID);
if (id == null) {
ServerHttpRequest request = exchange.getRequest();
String v = request.getHeaders().getFirst(CommonConstants.HEADER_TRACE_ID);
if (StringUtils.isNotBlank(v)) {
id = v;
} else {
id = CommonConstants.TRACE_ID_PREFIX + request.getId();
}
id = exchange.getRequest().getId();
}
return id;
}

View File

@@ -134,7 +134,7 @@
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<version>3.3.19.RELEASE</version>
<version>3.3.20.RELEASE</version>
<scope>test</scope>
</dependency>