生成30的全局ID

public class TraceIdGenerator {

private static String        IP_16 = "ffffffff";
private static AtomicInteger count = new AtomicInteger(1000);

static {
    try {
        String ipAddress = getInetAddress();
        if (ipAddress != null) {
            IP_16 = getIP_16(ipAddress);
        }
    } catch (Throwable e) {
        /*
         * empty catch block
         */
    }
}

private static String getTraceId(String ip, long timestamp, int nextId) {
    StringBuilder appender = new StringBuilder(30);
    appender.append(ip).append(timestamp).append(nextId).append(TracerUtils.getPID());
    return appender.toString();
}

public static String generate() {
    return getTraceId(IP_16, System.currentTimeMillis(), getNextId());
}

private static String getIP_16(String ip) {
    String[] ips = ip.split("\\.");
    StringBuilder sb = new StringBuilder();
    for (String column : ips) {
        String hex = Integer.toHexString(Integer.parseInt(column));
        if (hex.length() == 1) {
            sb.append('0').append(hex);
        } else {
            sb.append(hex);
        }

    }
    return sb.toString();
}

private static int getNextId() {
    for (;;) {
        int current = count.get();
        int next = (current > 9000) ? 1000 : current + 1;
        if (count.compareAndSet(current, next)) {
            return next;
        }
    }
}

public static String getInetAddress() {
    try {
        Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
        InetAddress address = null;
        while (interfaces.hasMoreElements()) {
            NetworkInterface ni = interfaces.nextElement();
            Enumeration<InetAddress> addresses = ni.getInetAddresses();
            while (addresses.hasMoreElements()) {
                address = addresses.nextElement();
                if (!address.isLoopbackAddress() && address.getHostAddress().indexOf(":") == -1) {
                    return address.getHostAddress();
                }
            }
        }
        return null;
    } catch (Throwable t) {
        return null;
    }
}

}

注:来源于开源组件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容