From 482a3313c49b3a3607d870a890589e2d63327e4a Mon Sep 17 00:00:00 2001 From: redkale Date: Fri, 20 Oct 2023 14:54:41 +0800 Subject: [PATCH] traceid --- .../java/org/redkale/cluster/HttpClusterRpcClient.java | 7 +++++++ .../java/org/redkale/cluster/HttpLocalRpcClient.java | 9 ++++++++- src/main/java/org/redkale/net/http/HttpRequest.java | 5 +++++ src/main/java/org/redkale/net/http/HttpServlet.java | 1 + src/main/java/org/redkale/net/http/Rest.java | 5 ++++- 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/redkale/cluster/HttpClusterRpcClient.java b/src/main/java/org/redkale/cluster/HttpClusterRpcClient.java index a06b32e83..457ec124c 100644 --- a/src/main/java/org/redkale/cluster/HttpClusterRpcClient.java +++ b/src/main/java/org/redkale/cluster/HttpClusterRpcClient.java @@ -11,6 +11,7 @@ import java.util.logging.Logger; import org.redkale.annotation.Resource; import org.redkale.boot.Application; import org.redkale.net.http.*; +import org.redkale.util.Traces; import org.redkale.util.Utility; /** @@ -73,6 +74,9 @@ public class HttpClusterRpcClient extends HttpRpcClient { } private CompletableFuture> httpAsync(boolean produce, Serializable userid, HttpSimpleRequest req) { + if (Utility.isEmpty(req.getTraceid())) { + req.setTraceid(Traces.currentTraceid()); + } String module = req.getRequestURI(); module = module.substring(1); //去掉/ module = module.substring(0, module.indexOf('/')); @@ -94,6 +98,9 @@ public class HttpClusterRpcClient extends HttpRpcClient { if (req.isRpc()) { clientHeaders.put(Rest.REST_HEADER_RPC, "true"); } + if (Utility.isNotEmpty(req.getTraceid())) { + clientHeaders.put(Rest.REST_HEADER_TRACEID, req.getTraceid()); + } if (req.isFrombody()) { clientHeaders.put(Rest.REST_HEADER_PARAM_FROM_BODY, "true"); } diff --git a/src/main/java/org/redkale/cluster/HttpLocalRpcClient.java b/src/main/java/org/redkale/cluster/HttpLocalRpcClient.java index 3db102b71..46eb69219 100644 --- a/src/main/java/org/redkale/cluster/HttpLocalRpcClient.java +++ b/src/main/java/org/redkale/cluster/HttpLocalRpcClient.java @@ -13,11 +13,12 @@ import java.util.concurrent.CompletableFuture; import java.util.logging.Level; import java.util.logging.Logger; import org.redkale.boot.*; -import org.redkale.cluster.HttpRpcClient; import org.redkale.convert.Convert; import org.redkale.convert.json.JsonConvert; import org.redkale.net.http.*; import org.redkale.util.RedkaleException; +import org.redkale.util.Traces; +import org.redkale.util.Utility; /** * 没有配置MQ且也没有ClusterAgent的情况下实现的默认HttpMessageClient实例 @@ -100,6 +101,9 @@ public class HttpLocalRpcClient extends HttpRpcClient { @Override public CompletableFuture sendMessage(Serializable userid, String groupid, HttpSimpleRequest request, Type type) { + if (Utility.isEmpty(request.getTraceid())) { + request.setTraceid(Traces.currentTraceid()); + } String topic = generateHttpReqTopic(request, request.getPath()); HttpServlet servlet = findHttpServlet(topic); CompletableFuture future = new CompletableFuture(); @@ -122,6 +126,9 @@ public class HttpLocalRpcClient extends HttpRpcClient { @Override public CompletableFuture> sendMessage(String topic, Serializable userid, String groupid, HttpSimpleRequest request) { + if (Utility.isEmpty(request.getTraceid())) { + request.setTraceid(Traces.currentTraceid()); + } HttpServlet servlet = findHttpServlet(topic); if (servlet == null) { if (logger.isLoggable(Level.FINE)) { diff --git a/src/main/java/org/redkale/net/http/HttpRequest.java b/src/main/java/org/redkale/net/http/HttpRequest.java index acbb16e35..5ab7227ea 100644 --- a/src/main/java/org/redkale/net/http/HttpRequest.java +++ b/src/main/java/org/redkale/net/http/HttpRequest.java @@ -819,6 +819,11 @@ public class HttpRequest extends Request { : (vlen == 5 && content[0] == 'f' && content[1] == 'a' && content[2] == 'l' && content[3] == 's' && content[4] == 'e' ? "false" : bytes.toString(true, charset))); break; + case Rest.REST_HEADER_TRACEID: //rest-traceid + value = bytes.toString(true, charset); + this.traceid = value; + headers.put(name, value); + break; case Rest.REST_HEADER_CURRUSERID: //rest-curruserid value = bytes.toString(true, charset); this.hashid = value.hashCode(); diff --git a/src/main/java/org/redkale/net/http/HttpServlet.java b/src/main/java/org/redkale/net/http/HttpServlet.java index 2837dc4b6..170d6a72d 100644 --- a/src/main/java/org/redkale/net/http/HttpServlet.java +++ b/src/main/java/org/redkale/net/http/HttpServlet.java @@ -83,6 +83,7 @@ public class HttpServlet extends Servlet response.updateNonBlocking(false); response.getWorkExecutor().execute(() -> { try { + Traces.computeIfAbsent(request.getTraceid()); entry.servlet.execute(request, response); } catch (Throwable t) { response.getContext().getLogger().log(Level.WARNING, "Servlet occur exception. request = " + request, t); diff --git a/src/main/java/org/redkale/net/http/Rest.java b/src/main/java/org/redkale/net/http/Rest.java index 348ec6c9e..a793d1903 100644 --- a/src/main/java/org/redkale/net/http/Rest.java +++ b/src/main/java/org/redkale/net/http/Rest.java @@ -44,6 +44,9 @@ public final class Rest { //请求是否为rpc协议,值类型: 布尔,取值为true、false public static final String REST_HEADER_RPC = "rest-rpc"; + //traceid,值类型: 字符串 + public static final String REST_HEADER_TRACEID = "rest-traceid"; + //当前用户ID值,值类型: 字符串 public static final String REST_HEADER_CURRUSERID = "rest-curruserid"; @@ -348,7 +351,7 @@ public final class Rest { public static String getHttpRespTopicPrefix() { return "http.resp."; } - + //仅供Rest动态构建里 currentUserid() 使用 @AsmDepends public static T orElse(T t, T defValue) {