This commit is contained in:
redkale
2023-10-20 14:54:41 +08:00
parent fa8225fb1b
commit 482a3313c4
5 changed files with 25 additions and 2 deletions

View File

@@ -11,6 +11,7 @@ import java.util.logging.Logger;
import org.redkale.annotation.Resource; import org.redkale.annotation.Resource;
import org.redkale.boot.Application; import org.redkale.boot.Application;
import org.redkale.net.http.*; import org.redkale.net.http.*;
import org.redkale.util.Traces;
import org.redkale.util.Utility; import org.redkale.util.Utility;
/** /**
@@ -73,6 +74,9 @@ public class HttpClusterRpcClient extends HttpRpcClient {
} }
private CompletableFuture<HttpResult<byte[]>> httpAsync(boolean produce, Serializable userid, HttpSimpleRequest req) { private CompletableFuture<HttpResult<byte[]>> httpAsync(boolean produce, Serializable userid, HttpSimpleRequest req) {
if (Utility.isEmpty(req.getTraceid())) {
req.setTraceid(Traces.currentTraceid());
}
String module = req.getRequestURI(); String module = req.getRequestURI();
module = module.substring(1); //去掉/ module = module.substring(1); //去掉/
module = module.substring(0, module.indexOf('/')); module = module.substring(0, module.indexOf('/'));
@@ -94,6 +98,9 @@ public class HttpClusterRpcClient extends HttpRpcClient {
if (req.isRpc()) { if (req.isRpc()) {
clientHeaders.put(Rest.REST_HEADER_RPC, "true"); clientHeaders.put(Rest.REST_HEADER_RPC, "true");
} }
if (Utility.isNotEmpty(req.getTraceid())) {
clientHeaders.put(Rest.REST_HEADER_TRACEID, req.getTraceid());
}
if (req.isFrombody()) { if (req.isFrombody()) {
clientHeaders.put(Rest.REST_HEADER_PARAM_FROM_BODY, "true"); clientHeaders.put(Rest.REST_HEADER_PARAM_FROM_BODY, "true");
} }

View File

@@ -13,11 +13,12 @@ import java.util.concurrent.CompletableFuture;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.redkale.boot.*; import org.redkale.boot.*;
import org.redkale.cluster.HttpRpcClient;
import org.redkale.convert.Convert; import org.redkale.convert.Convert;
import org.redkale.convert.json.JsonConvert; import org.redkale.convert.json.JsonConvert;
import org.redkale.net.http.*; import org.redkale.net.http.*;
import org.redkale.util.RedkaleException; import org.redkale.util.RedkaleException;
import org.redkale.util.Traces;
import org.redkale.util.Utility;
/** /**
* 没有配置MQ且也没有ClusterAgent的情况下实现的默认HttpMessageClient实例 * 没有配置MQ且也没有ClusterAgent的情况下实现的默认HttpMessageClient实例
@@ -100,6 +101,9 @@ public class HttpLocalRpcClient extends HttpRpcClient {
@Override @Override
public <T> CompletableFuture<T> sendMessage(Serializable userid, String groupid, HttpSimpleRequest request, Type type) { public <T> CompletableFuture<T> sendMessage(Serializable userid, String groupid, HttpSimpleRequest request, Type type) {
if (Utility.isEmpty(request.getTraceid())) {
request.setTraceid(Traces.currentTraceid());
}
String topic = generateHttpReqTopic(request, request.getPath()); String topic = generateHttpReqTopic(request, request.getPath());
HttpServlet servlet = findHttpServlet(topic); HttpServlet servlet = findHttpServlet(topic);
CompletableFuture future = new CompletableFuture(); CompletableFuture future = new CompletableFuture();
@@ -122,6 +126,9 @@ public class HttpLocalRpcClient extends HttpRpcClient {
@Override @Override
public CompletableFuture<HttpResult<byte[]>> sendMessage(String topic, Serializable userid, String groupid, HttpSimpleRequest request) { public CompletableFuture<HttpResult<byte[]>> sendMessage(String topic, Serializable userid, String groupid, HttpSimpleRequest request) {
if (Utility.isEmpty(request.getTraceid())) {
request.setTraceid(Traces.currentTraceid());
}
HttpServlet servlet = findHttpServlet(topic); HttpServlet servlet = findHttpServlet(topic);
if (servlet == null) { if (servlet == null) {
if (logger.isLoggable(Level.FINE)) { if (logger.isLoggable(Level.FINE)) {

View File

@@ -819,6 +819,11 @@ public class HttpRequest extends Request<HttpContext> {
: (vlen == 5 && content[0] == 'f' && content[1] == 'a' && content[2] == 'l' && content[3] == 's' && content[4] == 'e' : (vlen == 5 && content[0] == 'f' && content[1] == 'a' && content[2] == 'l' && content[3] == 's' && content[4] == 'e'
? "false" : bytes.toString(true, charset))); ? "false" : bytes.toString(true, charset)));
break; 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 case Rest.REST_HEADER_CURRUSERID: //rest-curruserid
value = bytes.toString(true, charset); value = bytes.toString(true, charset);
this.hashid = value.hashCode(); this.hashid = value.hashCode();

View File

@@ -83,6 +83,7 @@ public class HttpServlet extends Servlet<HttpContext, HttpRequest, HttpResponse>
response.updateNonBlocking(false); response.updateNonBlocking(false);
response.getWorkExecutor().execute(() -> { response.getWorkExecutor().execute(() -> {
try { try {
Traces.computeIfAbsent(request.getTraceid());
entry.servlet.execute(request, response); entry.servlet.execute(request, response);
} catch (Throwable t) { } catch (Throwable t) {
response.getContext().getLogger().log(Level.WARNING, "Servlet occur exception. request = " + request, t); response.getContext().getLogger().log(Level.WARNING, "Servlet occur exception. request = " + request, t);

View File

@@ -44,6 +44,9 @@ public final class Rest {
//请求是否为rpc协议值类型: 布尔取值为true、false //请求是否为rpc协议值类型: 布尔取值为true、false
public static final String REST_HEADER_RPC = "rest-rpc"; public static final String REST_HEADER_RPC = "rest-rpc";
//traceid值类型: 字符串
public static final String REST_HEADER_TRACEID = "rest-traceid";
//当前用户ID值值类型: 字符串 //当前用户ID值值类型: 字符串
public static final String REST_HEADER_CURRUSERID = "rest-curruserid"; public static final String REST_HEADER_CURRUSERID = "rest-curruserid";
@@ -348,7 +351,7 @@ public final class Rest {
public static String getHttpRespTopicPrefix() { public static String getHttpRespTopicPrefix() {
return "http.resp."; return "http.resp.";
} }
//仅供Rest动态构建里 currentUserid() 使用 //仅供Rest动态构建里 currentUserid() 使用
@AsmDepends @AsmDepends
public static <T> T orElse(T t, T defValue) { public static <T> T orElse(T t, T defValue) {