traceid
This commit is contained in:
@@ -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<HttpResult<byte[]>> 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");
|
||||
}
|
||||
|
||||
@@ -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 <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());
|
||||
HttpServlet servlet = findHttpServlet(topic);
|
||||
CompletableFuture future = new CompletableFuture();
|
||||
@@ -122,6 +126,9 @@ public class HttpLocalRpcClient extends HttpRpcClient {
|
||||
|
||||
@Override
|
||||
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);
|
||||
if (servlet == null) {
|
||||
if (logger.isLoggable(Level.FINE)) {
|
||||
|
||||
@@ -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'
|
||||
? "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();
|
||||
|
||||
@@ -83,6 +83,7 @@ public class HttpServlet extends Servlet<HttpContext, HttpRequest, HttpResponse>
|
||||
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);
|
||||
|
||||
@@ -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> T orElse(T t, T defValue) {
|
||||
|
||||
Reference in New Issue
Block a user