Skip to content

Commit 811e3f0

Browse files
committed
fixed tracing bug.
1 parent a2e7258 commit 811e3f0

3 files changed

Lines changed: 50 additions & 32 deletions

File tree

txlcn-tracing/src/main/java/com/codingapi/txlcn/tracing/TracingConstants.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ public class TracingConstants {
2727

2828
public static final String APP_MAP = "appMap";
2929

30-
public static final String THREAD_ID = "threadId";
31-
3230
public static final String HEADER_KEY_GROUP_ID = "X-Group-ID";
3331

3432
public static final String HEADER_KEY_APP_MAP = "X-App-Map";

txlcn-tracing/src/main/java/com/codingapi/txlcn/tracing/TracingContext.java

Lines changed: 43 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,16 @@
2424
import org.springframework.util.StringUtils;
2525

2626
import java.nio.charset.Charset;
27+
import java.nio.charset.StandardCharsets;
2728
import java.util.HashMap;
2829
import java.util.Map;
2930
import java.util.Objects;
31+
import java.util.Optional;
3032

3133
/**
3234
* Description:
3335
* 1. {@code fields}为 {@code null}。发起方出现,未开始事务组
3436
* 2. {@code fields}不为空,fields.get(TracingConstants.GROUP_ID) 是 {@code empty}。参与方出现,未开启事务组。
35-
* 3. TBD
3637
* Date: 19-1-28 下午4:21
3738
*
3839
* @author ujued
@@ -73,22 +74,24 @@ public static void init(Map<String, String> initFields) {
7374
if (Objects.isNull(tracingContext.fields)) {
7475
tracingContext.fields = new HashMap<>();
7576
}
76-
//APP_MAP base64 解码
77-
if (initFields.containsKey(TracingConstants.APP_MAP)) {
78-
String appMapVal = initFields.get(TracingConstants.APP_MAP);
79-
if (!appMapVal.startsWith("{") || !appMapVal.contains("{")) {
80-
initFields.put(TracingConstants.APP_MAP, tracingContext.baseString2appMap(appMapVal));
81-
}
82-
}
8377
tracingContext.fields.putAll(initFields);
84-
tracingContext.fields.put(TracingConstants.THREAD_ID, String.valueOf(Thread.currentThread().getId()));
8578
}
8679

80+
/**
81+
* 判断是否有事务组
82+
*
83+
* @return result
84+
*/
8785
public boolean hasGroup() {
8886
return Objects.nonNull(fields) && fields.containsKey(TracingConstants.GROUP_ID) &&
8987
StringUtils.hasText(fields.get(TracingConstants.GROUP_ID));
9088
}
9189

90+
/**
91+
* 获取事务组ID
92+
*
93+
* @return groupId
94+
*/
9295
public String groupId() {
9396
if (hasGroup()) {
9497
return fields.get(TracingConstants.GROUP_ID);
@@ -97,10 +100,21 @@ public String groupId() {
97100
return "";
98101
}
99102

103+
/**
104+
* 所有的字段
105+
*
106+
* @return fields
107+
*/
100108
public Map<String, String> fields() {
101109
return this.fields;
102110
}
103111

112+
/**
113+
* 添加App
114+
*
115+
* @param serviceId serviceId
116+
* @param address address
117+
*/
104118
public void addApp(String serviceId, String address) {
105119
if (hasGroup()) {
106120
JSONObject map = JSON.parseObject(this.fields.get(TracingConstants.APP_MAP));
@@ -114,35 +128,36 @@ public void addApp(String serviceId, String address) {
114128
raiseNonGroupException();
115129
}
116130

117-
public String appMapBase64String() {
118-
if (hasGroup()) {
119-
return Base64Utils.encodeToString(this.fields.get(TracingConstants.APP_MAP).getBytes(Charset.forName("utf8")));
120-
}
121-
raiseNonGroupException();
122-
return "";
123-
}
124-
125-
private String baseString2appMap(String base64Str) {
126-
//解码
127-
if (!"".equals(base64Str)) {
128-
base64Str = Base64Utils.encodeToString(base64Str.getBytes(Charset.forName("utf8")));
129-
}
130-
return base64Str;
131+
/**
132+
* JSON Type App map.
133+
*
134+
* @return appMap
135+
*/
136+
public JSONObject appMap() {
137+
return JSON.parseObject(appMapString());
131138
}
132139

133-
public JSONObject appMap() {
140+
/**
141+
* String Type App map.
142+
*
143+
* @return appMap
144+
*/
145+
public String appMapString() {
134146
if (hasGroup()) {
135-
String appMap = this.fields.get(TracingConstants.APP_MAP);
147+
String appMap = Optional.ofNullable(this.fields.get(TracingConstants.APP_MAP)).orElse("");
136148
log.debug("App map: {}", appMap);
137-
return JSON.parseObject(appMap);
149+
return appMap;
138150
}
139151
raiseNonGroupException();
140-
return JSON.parseObject("{}");
152+
return "{}";
141153
}
142154

155+
/**
156+
* 销毁当前线程Tracing信息
157+
*/
143158
public void destroy() {
144159
if (Objects.nonNull(tracingContextThreadLocal.get())) {
145-
tracingContextThreadLocal.set(null);
160+
tracingContextThreadLocal.remove();
146161
}
147162
}
148163

txlcn-tracing/src/main/java/com/codingapi/txlcn/tracing/Tracings.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
import com.codingapi.txlcn.common.util.Maps;
44
import lombok.extern.slf4j.Slf4j;
5+
import org.springframework.util.Base64Utils;
6+
import org.springframework.util.StringUtils;
57

8+
import java.nio.charset.StandardCharsets;
69
import java.util.Optional;
710

811
/**
@@ -29,7 +32,8 @@ public static void transmit(TracingSetter tracingSetter) {
2932
if (TracingContext.tracing().hasGroup()) {
3033
log.debug("tracing transmit group:{}", TracingContext.tracing().groupId());
3134
tracingSetter.set(TracingConstants.HEADER_KEY_GROUP_ID, TracingContext.tracing().groupId());
32-
tracingSetter.set(TracingConstants.HEADER_KEY_APP_MAP, TracingContext.tracing().appMapBase64String());
35+
tracingSetter.set(TracingConstants.HEADER_KEY_APP_MAP,
36+
Base64Utils.encodeToString(TracingContext.tracing().appMapString().getBytes(StandardCharsets.UTF_8)));
3337
}
3438
}
3539

@@ -41,7 +45,8 @@ public static void transmit(TracingSetter tracingSetter) {
4145
public static void apply(TracingGetter tracingGetter) {
4246
String groupId = Optional.ofNullable(tracingGetter.get(TracingConstants.HEADER_KEY_GROUP_ID)).orElse("");
4347
String appList = Optional.ofNullable(tracingGetter.get(TracingConstants.HEADER_KEY_APP_MAP)).orElse("");
44-
TracingContext.init(Maps.newHashMap(TracingConstants.GROUP_ID, groupId, TracingConstants.APP_MAP, appList));
48+
TracingContext.init(Maps.newHashMap(TracingConstants.GROUP_ID, groupId, TracingConstants.APP_MAP,
49+
StringUtils.isEmpty(appList) ? appList : new String(Base64Utils.decodeFromString(appList), StandardCharsets.UTF_8)));
4550
if (TracingContext.tracing().hasGroup()) {
4651
log.debug("tracing apply group:{}, app map:{}", groupId, appList);
4752
}

0 commit comments

Comments
 (0)