博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分享代码片段:web集群全局唯一request id生成算法, 替代uuid等“通用”方案
阅读量:6758 次
发布时间:2019-06-26

本文共 1480 字,大约阅读时间需要 4 分钟。

如何为每一个web请求分配一个在全集群范围内都唯一的request id,却又不想去实现一个复杂的集中式id序列生成器呢?

UUID? 这或许是个办法,但不觉得不太甘心么?
下面的这个方式可能可以帮到你:

package test;import java.util.concurrent.atomic.AtomicLong;import test.LocalIpAddressUtil;public class UniqRequestIdGen {    private static AtomicLong   lastId         = new AtomicLong();                                         // 自增id,用于requestId的生成过程    private static final long   startTimeStamp = System.currentTimeMillis();                               // 启动加载时的时间戳,用于requestId的生成过程    private static final String ip             = LocalIpAddressUtil.resolveLocalAddress().getHostAddress(); // 本机ip地址,用于requestId的生成过程    public static void main(String[] args) {        System.out.println(resolveReqId());    }    private static String resolveReqId() {        // 规则: hexIp(ip)base36(timestamp)-seq        return hexIp(ip) + Long.toString(startTimeStamp, Character.MAX_RADIX) + "-" + lastId.incrementAndGet();    }    // 将ip转换为定长8个字符的16进制表示形式:255.255.255.255 -> FFFFFFFF    private static String hexIp(String ip) {        StringBuilder sb = new StringBuilder();        for (String seg : ip.split("\\.")) {            String h = Integer.toHexString(Integer.parseInt(seg));            if (h.length() == 1) sb.append("0");            sb.append(h);        }        return sb.toString();    }}

其思路在注释里已经解释清楚了:这个id包含了本机ip、本应用启动时的时间戳、本应用内部自增id这三个要素,并且以合适的转码方式组合而成,可以简单地做到全局唯一性

生成的唯一性requestId形如:0a11d448iaxk1z35-112

利用它不仅能唯一标识一个请求,还能通过它反查到具体的机器ip

(注:其中引用到的LocalIpAddressUtil参见文章: )

转载地址:http://bbzeo.baihongyu.com/

你可能感兴趣的文章
Redis内存存储结构分析
查看>>
OCP终于考完了
查看>>
Cocos2D:滚动滚屏黑边问题
查看>>
Android 4.1最终版SDK和ADT Plugin全线发布
查看>>
jive论坛
查看>>
[Android问答] ListView如何加载远程图片?(附代码)
查看>>
k-means clustering - Wikipedia, the free encyclopedia
查看>>
三星S6D1121主控彩屏(240*320*18bit,262K)图形设备接口(GDI)实现
查看>>
head first java 01 ( 1 ~ 3 章 )
查看>>
Superhero.js – 构建大型 JavaScript 应用程序的最佳资源
查看>>
什么是UAT测试?
查看>>
FireDAC 下的 Sqlite [8] - 自定义函数
查看>>
Android 驱动测试程序H-M-S <2>
查看>>
Swift语言指南(七)--语言基础之布尔值和类型别名
查看>>
Hadoop 安装记录
查看>>
hdu 5206 Four Inages Strategy 判断是否是正方形
查看>>
Linq中使用Left Join
查看>>
HDFS Safemode问题
查看>>
GDI编程小结
查看>>
(C#基础) byte[] 之初始化, 赋值,转换。(转)
查看>>