三、源码解析
首先,需要定义ID组合方式所需的常量,如每段占用位数等
/* 开始时间 (2020-05-03) */
private final long twepoch = 1607529600000L;
/* 机器码所占的bit位数 = 10位 */
private final long workerIdBits = 10L;
/* 最大支持的机器码 = 1023,该式子相当与~(-1L << 10L) */
private final long maxWorkerId = -1L ^ (-1L << workerIdBits);
/* 序列号所占的bit位数 */
private final long sequenceBits = 12L;
/* 机器码需要在序列号的左边 */
private final long workerIdShift = sequenceBits;
/* 时间戳的起始位置在序列号和机器码的左边 */
private final long timestampLeftShift = sequenceBits + workerIdBits;
/* 序列号的最大支持数值 */
private final long sequenceMask = -1L ^ (-1L << sequenceBits);
然后,定义三个位段的含义字段
/* 机器码 (0 ~ 1023) */
private long workerId;
/* 序列号 (0 ~ 4095) */
private long sequence = 0L;
/* 最后时间戳 */
private long lastTimestamp = -1L;
接下来,就是生产分布式ID的核心
- 构建机器码,机器码和服务所在机器的ip地址有关,初