雪花算法id
承灿 2023/5/4
# 1 基于雪花算法生成的长整型ID
@Component
public class IdGeneratorSnowflake {
/**
* 工作节点ID,用于标识分布式系统中的某一特定机器,可通过机器IP地址转换得到
*/
private long workerId = 0;
/**
* 数据中心ID,用于标识分布式系统中的某一特定数据中心,可根据实际数据中心划分策略设定
*/
private long datacenterId = 1;
private Snowflake snowflake = IdUtil.getSnowflake(workerId, datacenterId);
/**
* Spring框架启动后自动调用此方法,进行初始化工作
*/
@PostConstruct
public void init() {
try {
// 获取当前服务器IPv4地址并转换为长整型数字作为工作节点ID
workerId = NetUtil.ipv4ToLong(NetUtil.getLocalhostStr());
} catch (Exception e) {
// 若出现异常,可选择使用本地主机字符串哈希值作为备用的工作节点ID
e.printStackTrace();
workerId = NetUtil.getLocalhostStr().hashCode();
}
}
/**
* 获取下一个全局唯一ID
* @return 返回一个基于雪花算法生成的长整型ID
*/
public synchronized Long snowflakeId() {
return snowflake.nextId();
}
}