Skip to content

Commit ffa021b

Browse files
committed
fix:修复高并发下的traceId重复问题
1 parent 21f6547 commit ffa021b

File tree

1 file changed

+4
-2
lines changed
  • dongtai-core/src/main/java/io/dongtai/iast/core/handler/hookpoint/service/trace

1 file changed

+4
-2
lines changed

dongtai-core/src/main/java/io/dongtai/iast/core/handler/hookpoint/service/trace/FeignService.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,23 @@ public static void solveSyncInvoke(MethodEvent event, AtomicInteger invokeIdSequ
3535

3636
Method addHeaderMethod = template.getClass().getDeclaredMethod("header", String.class, String[].class);
3737
addHeaderMethod.setAccessible(true);
38-
String traceId = ContextManager.nextTraceId();
3938
// clear old traceId header
4039
/*
4140
防止高并发下的treeMap修改问题,暂时可解决
4241
*/
4342
synchronized (template){
43+
//将生成traceId下放到锁内
44+
String traceId = ContextManager.nextTraceId();
45+
4446
addHeaderMethod.invoke(template, ContextManager.getHeaderKey(), new String[]{});
4547
addHeaderMethod.invoke(template, ContextManager.getParentKey(), new String[]{});
4648
addHeaderMethod.invoke(template, ContextManager.getHeaderKey(), new String[]{traceId});
4749
addHeaderMethod.invoke(template, ContextManager.getParentKey(),
4850
new String[]{String.valueOf(EngineManager.getAgentId())});
51+
event.traceId = traceId;
4952
}
5053
// add to method pool
5154
event.source = false;
52-
event.traceId = traceId;
5355
event.setCallStacks(StackUtils.createCallStack(4));
5456
int invokeId = invokeIdSequencer.getAndIncrement();
5557
event.setInvokeId(invokeId);

0 commit comments

Comments
 (0)