diff --git a/fizz-bootstrap/src/main/resources/log4j2-spring.xml b/fizz-bootstrap/src/main/resources/log4j2-spring.xml index 8429c18..c67a4d2 100644 --- a/fizz-bootstrap/src/main/resources/log4j2-spring.xml +++ b/fizz-bootstrap/src/main/resources/log4j2-spring.xml @@ -20,6 +20,5 @@ - diff --git a/fizz-core/src/main/java/we/config/SystemConfig.java b/fizz-core/src/main/java/we/config/SystemConfig.java index e3fbe53..54337e5 100644 --- a/fizz-core/src/main/java/we/config/SystemConfig.java +++ b/fizz-core/src/main/java/we/config/SystemConfig.java @@ -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; diff --git a/fizz-core/src/main/java/we/filter/AggregateFilter.java b/fizz-core/src/main/java/we/filter/AggregateFilter.java index 1aa5f18..047975f 100644 --- a/fizz-core/src/main/java/we/filter/AggregateFilter.java +++ b/fizz-core/src/main/java/we/filter/AggregateFilter.java @@ -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 headerTraceIds = serverHttpResponse.getHeaders().get(CommonConstants.HEADER_TRACE_ID); + List 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(); diff --git a/fizz-core/src/main/java/we/filter/CallbackFilter.java b/fizz-core/src/main/java/we/filter/CallbackFilter.java index d69339c..f1e5aef 100644 --- a/fizz-core/src/main/java/we/filter/CallbackFilter.java +++ b/fizz-core/src/main/java/we/filter/CallbackFilter.java @@ -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); diff --git a/fizz-core/src/main/java/we/filter/FilterExceptionHandlerConfig.java b/fizz-core/src/main/java/we/filter/FilterExceptionHandlerConfig.java index 1e37bda..c0b9437 100644 --- a/fizz-core/src/main/java/we/filter/FilterExceptionHandlerConfig.java +++ b/fizz-core/src/main/java/we/filter/FilterExceptionHandlerConfig.java @@ -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 { diff --git a/fizz-core/src/main/java/we/filter/FizzLogFilter.java b/fizz-core/src/main/java/we/filter/FizzLogFilter.java index 7756447..3c346eb 100644 --- a/fizz-core/src/main/java/we/filter/FizzLogFilter.java +++ b/fizz-core/src/main/java/we/filter/FizzLogFilter.java @@ -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)); } } ); diff --git a/fizz-core/src/main/java/we/filter/FlowControlFilter.java b/fizz-core/src/main/java/we/filter/FlowControlFilter.java index 7df67c3..da2c9f4 100644 --- a/fizz-core/src/main/java/we/filter/FlowControlFilter.java +++ b/fizz-core/src/main/java/we/filter/FlowControlFilter.java @@ -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 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 getResourceConfigItselfAndParents(ResourceConfig rc, List rcs) { boolean check = false; String rcId = rc.getResourceId(); diff --git a/fizz-core/src/main/java/we/filter/RouteFilter.java b/fizz-core/src/main/java/we/filter/RouteFilter.java index 8dd1d3c..e2a2a3c 100644 --- a/fizz-core/src/main/java/we/filter/RouteFilter.java +++ b/fizz-core/src/main/java/we/filter/RouteFilter.java @@ -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 doFilter(ServerWebExchange exchange, WebFilterChain chain) { @@ -77,7 +81,7 @@ public class RouteFilter extends FizzWebFilter { Mono 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 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 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> 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 attachments = Collections.singletonMap(CommonConstants.HEADER_TRACE_ID, WebUtils.getTraceId(exchange)); + Map 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); } ) ; diff --git a/fizz-core/src/main/java/we/fizz/AggregateService.java b/fizz-core/src/main/java/we/fizz/AggregateService.java index c664c14..4d916d2 100644 --- a/fizz-core/src/main/java/we/fizz/AggregateService.java +++ b/fizz-core/src/main/java/we/fizz/AggregateService.java @@ -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 request(String traceId, String clientReqPathPrefix, String method, String service, String path, MultiValueMap 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 headerTraceIds = clientResp.getHeaders().get(CommonConstants.HEADER_TRACE_ID); + List 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); diff --git a/fizz-core/src/main/java/we/fizz/input/extension/dubbo/DubboInput.java b/fizz-core/src/main/java/we/fizz/input/extension/dubbo/DubboInput.java index f34ccef..5a23bb1 100644 --- a/fizz-core/src/main/java/we/fizz/input/extension/dubbo/DubboInput.java +++ b/fizz-core/src/main/java/we/fizz/input/extension/dubbo/DubboInput.java @@ -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(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 proxyResponse = proxy.send(body, declaration, contextAttachment); diff --git a/fizz-core/src/main/java/we/fizz/input/extension/grpc/GrpcInput.java b/fizz-core/src/main/java/we/fizz/input/extension/grpc/GrpcInput.java index 4829d0d..edc78e7 100644 --- a/fizz-core/src/main/java/we/fizz/input/extension/grpc/GrpcInput.java +++ b/fizz-core/src/main/java/we/fizz/input/extension/grpc/GrpcInput.java @@ -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(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 proxyResponse = proxy.send(JSON.toJSONString(body), declaration, contextAttachment); diff --git a/fizz-core/src/main/java/we/fizz/input/extension/request/RequestInput.java b/fizz-core/src/main/java/we/fizz/input/extension/request/RequestInput.java index d1d6f4a..3138045 100644 --- a/fizz-core/src/main/java/we/fizz/input/extension/request/RequestInput.java +++ b/fizz-core/src/main/java/we/fizz/input/extension/request/RequestInput.java @@ -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; diff --git a/fizz-core/src/main/java/we/plugin/PluginFilter.java b/fizz-core/src/main/java/we/plugin/PluginFilter.java index bbef439..f988ad1 100644 --- a/fizz-core/src/main/java/we/plugin/PluginFilter.java +++ b/fizz-core/src/main/java/we/plugin/PluginFilter.java @@ -52,7 +52,7 @@ public abstract class PluginFilter implements FizzPluginFilter { public Mono filter(ServerWebExchange exchange, Map 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); diff --git a/fizz-core/src/main/java/we/plugin/auth/ApiConfigService.java b/fizz-core/src/main/java/we/plugin/auth/ApiConfigService.java index 5161507..0ec965b 100644 --- a/fizz-core/src/main/java/we/plugin/auth/ApiConfigService.java +++ b/fizz-core/src/main/java/we/plugin/auth/ApiConfigService.java @@ -289,7 +289,7 @@ public class ApiConfigService { public Mono 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)); } diff --git a/fizz-core/src/main/java/we/plugin/auth/AuthPluginFilter.java b/fizz-core/src/main/java/we/plugin/auth/AuthPluginFilter.java index 43c5aa3..fa18102 100644 --- a/fizz-core/src/main/java/we/plugin/auth/AuthPluginFilter.java +++ b/fizz-core/src/main/java/we/plugin/auth/AuthPluginFilter.java @@ -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 data = Collections.singletonMap(RESULT, r); return WebUtils.transmitSuccessFilterResultAndEmptyMono(exchange, AUTH_PLUGIN_FILTER, data); diff --git a/fizz-core/src/main/java/we/plugin/requestbody/RequestBodyPlugin.java b/fizz-core/src/main/java/we/plugin/requestbody/RequestBodyPlugin.java index 0823be5..4cbcbc1 100644 --- a/fizz-core/src/main/java/we/plugin/requestbody/RequestBodyPlugin.java +++ b/fizz-core/src/main/java/we/plugin/requestbody/RequestBodyPlugin.java @@ -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); } diff --git a/fizz-core/src/main/java/we/proxy/CallbackService.java b/fizz-core/src/main/java/we/proxy/CallbackService.java index 8cd24c6..19e643c 100644 --- a/fizz-core/src/main/java/we/proxy/CallbackService.java +++ b/fizz-core/src/main/java/we/proxy/CallbackService.java @@ -80,7 +80,7 @@ public class CallbackService { public Mono requestBackends(ServerWebExchange exchange, HttpHeaders headers, DataBuffer body, CallbackConfig cc, Map 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); } diff --git a/fizz-core/src/main/java/we/util/WebUtils.java b/fizz-core/src/main/java/we/util/WebUtils.java index d53a6d2..dd1947f 100644 --- a/fizz-core/src/main/java/we/util/WebUtils.java +++ b/fizz-core/src/main/java/we/util/WebUtils.java @@ -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 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 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 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; } diff --git a/pom.xml b/pom.xml index fac4814..d340759 100644 --- a/pom.xml +++ b/pom.xml @@ -134,7 +134,7 @@ io.projectreactor reactor-test - 3.3.19.RELEASE + 3.3.20.RELEASE test