diff --git a/version6/krpc-common/src/main/java/common/trace/TraceContext.java b/version6/krpc-common/src/main/java/common/trace/TraceContext.java index 22c83e3..8b4bdb5 100644 --- a/version6/krpc-common/src/main/java/common/trace/TraceContext.java +++ b/version6/krpc-common/src/main/java/common/trace/TraceContext.java @@ -47,7 +47,6 @@ public class TraceContext { } public static void clone(Map context){ for(Map.Entry entry:context.entrySet()){ - System.out.println(entry.getKey()+":"+entry.getValue()); MDC.put(entry.getKey(),entry.getValue()); } } diff --git a/version6/krpc-common/target/classes/common/message/RequestType.class b/version6/krpc-common/target/classes/common/message/RequestType.class new file mode 100644 index 0000000..0430f78 Binary files /dev/null and b/version6/krpc-common/target/classes/common/message/RequestType.class differ diff --git a/version6/krpc-common/target/classes/common/message/RpcRequest$RpcRequestBuilder.class b/version6/krpc-common/target/classes/common/message/RpcRequest$RpcRequestBuilder.class index f5d58a6..649584d 100644 Binary files a/version6/krpc-common/target/classes/common/message/RpcRequest$RpcRequestBuilder.class and b/version6/krpc-common/target/classes/common/message/RpcRequest$RpcRequestBuilder.class differ diff --git a/version6/krpc-common/target/classes/common/message/RpcRequest.class b/version6/krpc-common/target/classes/common/message/RpcRequest.class index 6f24559..60d5f96 100644 Binary files a/version6/krpc-common/target/classes/common/message/RpcRequest.class and b/version6/krpc-common/target/classes/common/message/RpcRequest.class differ diff --git a/version6/krpc-core/src/main/java/com/kama/trace/TraceIdGenerator.java b/version6/krpc-core/src/main/java/com/kama/trace/TraceIdGenerator.java index 1050485..042b997 100644 --- a/version6/krpc-core/src/main/java/com/kama/trace/TraceIdGenerator.java +++ b/version6/krpc-core/src/main/java/com/kama/trace/TraceIdGenerator.java @@ -8,15 +8,78 @@ import java.util.UUID; * @create 2025/2/16 23:05 */ public class TraceIdGenerator { + //机器序列号默认为0,真实场景中从配置中心获取 + private static final SnowflakeIdGenerator SNOWFLAKE =new SnowflakeIdGenerator(0L); + public static String generateTraceId() { + return Long.toHexString(SNOWFLAKE.nextId()); + } + public static String generateTraceIdUUID(){ UUID uuid = UUID.randomUUID(); String uuidString = uuid.toString(); // 去掉连字符 String uuidWithoutHyphens = uuidString.replace("-", ""); return uuidWithoutHyphens; } - public static String generateSpanId() { return String.valueOf(System.currentTimeMillis()); } + static class SnowflakeIdGenerator { + // 机器 ID(0~1023) + private final long workerId; + + // 基准时间(2021-01-01 00:00:00) + private final long epoch = 1609459200000L; + + // 序列号(0~4095) + private long sequence = 0L; + + // 上一次生成 ID 的时间戳 + private long lastTimestamp = -1L; + + // 构造函数,传入机器 ID + public SnowflakeIdGenerator(long workerId) { + if (workerId < 0 || workerId > 1023) { + throw new IllegalArgumentException("Worker ID 必须在 0~1023 之间"); + } + this.workerId = workerId; + } + + // 生成下一个 ID + public synchronized long nextId() { + long timestamp = System.currentTimeMillis(); + + // 如果当前时间小于上一次生成 ID 的时间,说明时钟回拨 + if (timestamp < lastTimestamp) { + throw new RuntimeException("时钟回拨!"); + } + + // 如果当前时间等于上一次生成 ID 的时间,递增序列号 + if (timestamp == lastTimestamp) { + sequence = (sequence + 1) & 0xFFF; // 12 位序列号,最大 4095 + if (sequence == 0) { + // 如果序列号溢出,等待下一毫秒 + timestamp = waitNextMillis(lastTimestamp); + } + } else { + // 如果当前时间大于上一次生成 ID 的时间,重置序列号 + sequence = 0L; + } + + // 更新上一次生成 ID 的时间戳 + lastTimestamp = timestamp; + + // 生成 ID + return ((timestamp - epoch) << 22) | (workerId << 12) | sequence; + } + + // 等待下一毫秒 + private long waitNextMillis(long lastTimestamp) { + long timestamp = System.currentTimeMillis(); + while (timestamp <= lastTimestamp) { + timestamp = System.currentTimeMillis(); + } + return timestamp; + } + } } diff --git a/version6/krpc-core/target/classes/com/kama/client/netty/HeartbeatHandler.class b/version6/krpc-core/target/classes/com/kama/client/netty/HeartbeatHandler.class index 7d8d279..a451e38 100644 Binary files a/version6/krpc-core/target/classes/com/kama/client/netty/HeartbeatHandler.class and b/version6/krpc-core/target/classes/com/kama/client/netty/HeartbeatHandler.class differ diff --git a/version6/krpc-core/target/classes/com/kama/client/netty/NettyClientHandler.class b/version6/krpc-core/target/classes/com/kama/client/netty/NettyClientHandler.class index a6cecd4..43f66cb 100644 Binary files a/version6/krpc-core/target/classes/com/kama/client/netty/NettyClientHandler.class and b/version6/krpc-core/target/classes/com/kama/client/netty/NettyClientHandler.class differ diff --git a/version6/krpc-core/target/classes/com/kama/server/netty/HeartbeatHandler.class b/version6/krpc-core/target/classes/com/kama/server/netty/HeartbeatHandler.class index a5f1692..739f1ed 100644 Binary files a/version6/krpc-core/target/classes/com/kama/server/netty/HeartbeatHandler.class and b/version6/krpc-core/target/classes/com/kama/server/netty/HeartbeatHandler.class differ diff --git a/version6/krpc-core/target/classes/com/kama/server/netty/NettyServerInitializer.class b/version6/krpc-core/target/classes/com/kama/server/netty/NettyServerInitializer.class index ecd2890..588ac44 100644 Binary files a/version6/krpc-core/target/classes/com/kama/server/netty/NettyServerInitializer.class and b/version6/krpc-core/target/classes/com/kama/server/netty/NettyServerInitializer.class differ diff --git a/version6/krpc-core/target/classes/com/kama/trace/TraceIdGenerator$SnowflakeIdGenerator.class b/version6/krpc-core/target/classes/com/kama/trace/TraceIdGenerator$SnowflakeIdGenerator.class new file mode 100644 index 0000000..de725b3 Binary files /dev/null and b/version6/krpc-core/target/classes/com/kama/trace/TraceIdGenerator$SnowflakeIdGenerator.class differ diff --git a/version6/krpc-core/target/classes/com/kama/trace/TraceIdGenerator.class b/version6/krpc-core/target/classes/com/kama/trace/TraceIdGenerator.class index 5bbe787..ed9fb11 100644 Binary files a/version6/krpc-core/target/classes/com/kama/trace/TraceIdGenerator.class and b/version6/krpc-core/target/classes/com/kama/trace/TraceIdGenerator.class differ