traceid
This commit is contained in:
@@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)) {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user