sky-walking的traceId生成

为什么80%的码农都做不了架构师?>>>   hot3.png

##TraceIdGenerator

public final class TraceIdGenerator {
	private static final ThreadLocal ThreadTraceIdSequence = new ThreadLocal();

	private static final String PROCESS_UUID;

	static {
		String uuid = UUID.randomUUID().toString().replaceAll("-", "");
		PROCESS_UUID = uuid.substring(uuid.length() - 7);
	}

	private TraceIdGenerator() {
	}

	/**
	 * TraceId由以下规则组成
* 2位version号 + 1位时间戳(毫秒数) + 1位进程随机号(UUID后7位) + 1位进程数号 + 1位线程号 + 1位线程内序号 * * 注意:这里的位,是指“.”作为分隔符所占的位数,非字符串长度的位数。 * TraceId为不定长字符串,但保证在分布式集群条件下的唯一性 * * @return */ public static String generate() { Integer seq = ThreadTraceIdSequence.get(); if (seq == null || seq == 10000 || seq > 10000) { seq = 0; } seq++; ThreadTraceIdSequence.set(seq); return Constants.SDK_VERSION + "." + System.currentTimeMillis() + "." + PROCESS_UUID + "." + BuriedPointMachineUtil.getProcessNo() + "." + Thread.currentThread().getId() + "." + seq; } }

##BuriedPointMachineUtil

public final class BuriedPointMachineUtil {
    private static String processNo;
    private static String IP;
    private static String hostName;

    static {
        processNo = getProcessNo();
    }

    public static String getProcessNo() {
        if (StringUtil.isEmpty(processNo)) {
            String name = ManagementFactory.getRuntimeMXBean().getName();
            processNo = name.split("@")[0];
        }
        return processNo;
    }

    private static InetAddress getInetAddress() {
        try {
            return InetAddress.getLocalHost();
        } catch (UnknownHostException e) {
            hostName = "unknown host!";
        }
        return null;

    }

    public static String getHostIp() {
        if (StringUtil.isEmpty(IP)) {
            InetAddress netAddress = getInetAddress();
            if (null == netAddress) {
            	IP = "N/A";
            }else{
            	IP = netAddress.getHostAddress(); //get the ip address
            }
        }
        return IP;
    }

    public static String getHostName() {
        if (StringUtil.isEmpty(hostName)) {
            InetAddress netAddress = getInetAddress();
            if (null == netAddress) {
            	hostName = "N/A";
            }else{
            	hostName = netAddress.getHostName(); //get the host address
            }
        }
        return hostName;
    }
    
    public static String getHostDesc(){
    	return getHostName() + "/" + getHostIp();
    }

    private BuriedPointMachineUtil() {
        // Non
    }

}

##docs

  • TraceIdGenerator

转载于:https://my.oschina.net/go4it/blog/760924

你可能感兴趣的:(sky-walking的traceId生成)