sky-walking的traceId生成

##TraceIdGenerator

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

	private static final String PROCESS_UUID;

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

	private TraceIdGenerator() {
	}

	/**
	 * TraceId由以下规则组成<br/>
	 * 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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值