diff --git a/src/main/java/org/redkale/mq/HttpMessageClientProcessor.java b/src/main/java/org/redkale/mq/HttpMessageClientProcessor.java index 7ef21b8c5..549319977 100644 --- a/src/main/java/org/redkale/mq/HttpMessageClientProcessor.java +++ b/src/main/java/org/redkale/mq/HttpMessageClientProcessor.java @@ -90,7 +90,7 @@ public class HttpMessageClientProcessor implements MessageClientProcessor { private void execute(final MessageRecord message, final Runnable callback) { HttpMessageRequest request = null; try { - Traces.currentTraceid(message.getTraceid()); + Traces.computeIfAbsent(message.getTraceid()); long now = System.currentTimeMillis(); long cha = now - message.createTime; long e = now - startTime; diff --git a/src/main/java/org/redkale/mq/SncpMessageClientProcessor.java b/src/main/java/org/redkale/mq/SncpMessageClientProcessor.java index 502607b2a..a97185af0 100644 --- a/src/main/java/org/redkale/mq/SncpMessageClientProcessor.java +++ b/src/main/java/org/redkale/mq/SncpMessageClientProcessor.java @@ -69,7 +69,7 @@ public class SncpMessageClientProcessor implements MessageClientProcessor { private void execute(final MessageRecord message, final Runnable callback) { SncpMessageResponse response = null; try { - Traces.currentTraceid(message.getTraceid()); + Traces.computeIfAbsent(message.getTraceid()); long now = System.currentTimeMillis(); long cha = now - message.createTime; long e = now - starttime; diff --git a/src/main/java/org/redkale/net/Context.java b/src/main/java/org/redkale/net/Context.java index 0ce8d59e4..a406449a5 100644 --- a/src/main/java/org/redkale/net/Context.java +++ b/src/main/java/org/redkale/net/Context.java @@ -103,7 +103,8 @@ public class Context { this.bsonFactory = BsonFactory.root(); } - protected void executeDispatch(Request request, Response response) { + protected final void executeDispatch(Request request, Response response) { + request.traceid = Traces.computeIfAbsent(request.getTraceid()); dispatcher.dispatch(request, response); } @@ -112,7 +113,7 @@ public class Context { response.updateNonBlocking(false); workExecutor.execute(() -> { try { - Traces.computeCurrTraceid(request.getTraceid()); + request.traceid = Traces.computeIfAbsent(request.getTraceid()); servlet.execute(request, response); } catch (Throwable t) { response.context.logger.log(Level.WARNING, "Execute servlet occur exception. request = " + request, t); @@ -121,7 +122,7 @@ public class Context { }); } else { try { - Traces.computeCurrTraceid(request.getTraceid()); + request.traceid = Traces.computeIfAbsent(request.getTraceid()); servlet.execute(request, response); } catch (Throwable t) { response.context.logger.log(Level.WARNING, "Execute servlet occur exception. request = " + request, t); diff --git a/src/main/java/org/redkale/net/DispatcherServlet.java b/src/main/java/org/redkale/net/DispatcherServlet.java index 213864e14..7925ffe69 100644 --- a/src/main/java/org/redkale/net/DispatcherServlet.java +++ b/src/main/java/org/redkale/net/DispatcherServlet.java @@ -13,7 +13,7 @@ import java.util.function.*; import java.util.logging.Level; import java.util.stream.Stream; import org.redkale.boot.Application; -import org.redkale.util.*; +import org.redkale.util.AnyValue; /** * 根Servlet, 一个Server只能存在一个根Servlet @@ -291,7 +291,6 @@ public abstract class DispatcherServlet implements Complet if (exc != null) { if (workThread.getState() == Thread.State.RUNNABLE) { //fullCache时state不是RUNNABLE if (workThread.inIO()) { - Traces.currentTraceid(request.traceid); + Traces.computeIfAbsent(request.traceid); respFuture.completeExceptionally(exc); } else { workThread.execute(() -> { - Traces.currentTraceid(request.traceid); + Traces.computeIfAbsent(request.traceid); respFuture.completeExceptionally(exc); }); } } else { workThread.runWork(() -> { - Traces.currentTraceid(request.traceid); + Traces.computeIfAbsent(request.traceid); respFuture.completeExceptionally(exc); }); } @@ -143,17 +143,17 @@ public abstract class ClientCodec implements Complet final P rs = request.respTransfer == null ? message : (P) request.respTransfer.apply(message); if (workThread.getState() == Thread.State.RUNNABLE) { //fullCache时state不是RUNNABLE if (workThread.inIO()) { - Traces.currentTraceid(request.traceid); + Traces.computeIfAbsent(request.traceid); respFuture.complete(rs); } else { workThread.execute(() -> { - Traces.currentTraceid(request.traceid); + Traces.computeIfAbsent(request.traceid); respFuture.complete(rs); }); } } else { workThread.runWork(() -> { - Traces.currentTraceid(request.traceid); + Traces.computeIfAbsent(request.traceid); respFuture.complete(rs); }); } @@ -161,17 +161,17 @@ public abstract class ClientCodec implements Complet } catch (Throwable t) { if (workThread.getState() == Thread.State.RUNNABLE) { //fullCache时state不是RUNNABLE if (workThread.inIO()) { - Traces.currentTraceid(request.traceid); + Traces.computeIfAbsent(request.traceid); respFuture.completeExceptionally(t); } else { workThread.execute(() -> { - Traces.currentTraceid(request.traceid); + Traces.computeIfAbsent(request.traceid); respFuture.completeExceptionally(t); }); } } else { workThread.runWork(() -> { - Traces.currentTraceid(request.traceid); + Traces.computeIfAbsent(request.traceid); respFuture.completeExceptionally(t); }); } diff --git a/src/main/java/org/redkale/util/Traces.java b/src/main/java/org/redkale/util/Traces.java index 8a7d2d20a..e6553189f 100644 --- a/src/main/java/org/redkale/util/Traces.java +++ b/src/main/java/org/redkale/util/Traces.java @@ -30,33 +30,20 @@ public class Traces { return enable ? tidSupplier.get() : null; } - public static void computeCurrTraceid(String requestTraceid) { - if (enable) { - if (requestTraceid == null) { - localTrace.set(tidSupplier.get()); - } else { - localTrace.set(requestTraceid); - } - } - } - -// public static String loadTraceid() { -// if (!enable) return null; -// String traceid = localTrace.get(); -// if (traceid == null) { -// traceid = tidSupplier.get(); -// localTrace.set(traceid); -// } -// return traceid; -// } - public static void currentTraceid(String traceid) { - if (enable) { - localTrace.set(traceid); - } - } - public static String currentTraceid() { return enable ? localTrace.get() : null; } + public static String computeIfAbsent(String requestTraceid) { + if (enable) { + String rs = requestTraceid; + if (rs == null || rs.isEmpty()) { + rs = tidSupplier.get(); + } + localTrace.set(rs); + return rs; + } + return requestTraceid; + } + }