yitter / IdGenerator

💎多语言实现,高性能生成唯一数字ID。 💎优化的雪花算法(SnowFlake)——雪花漂移算法,在缩短ID长度的同时,具备极高瞬时并发处理能力(50W/0.1s)。 💎原生支持 C#/Java/Go/Rust/C/JavaScript/TypeScript/Python/Pascal 多语言,提供其它适用于其它语言的多线程安全调用动态库(FFI)。💎支持容器环境自动扩容(自动注册 WorkerId ),单机或分布式唯一IdGenerator。💎顶尖优化,超强效能。
MIT License
2.64k stars 376 forks source link

WorkerId error. (range:[0, 63],错误提示 #84

Closed gulang12 closed 11 months ago

gulang12 commented 11 months ago

public class ApplicationRunnerInit implements ApplicationRunner { private final Logger log = LoggerFactory.getLogger(ApplicationRunnerInit.class); @Override public void run(ApplicationArguments args) throws Exception { // WorkerId:(WorkerId考虑使用redis自增动态分配便于集群部署,每个节点保证唯一)

    long workerId = CsRedisUtil.incr(RedisKeyConstant.AppInitData.AUTO_INCREMENT_WORKER_ID, 1);
    IdGeneratorOptions options = new IdGeneratorOptions((short) workerId);
    try {
        // 保存参数(务必调用,否则参数设置不生效):
        YitIdHelper.setIdGenerator(options);
    }catch (IdGeneratorException idGeneratorException){
        // 失败后,服务停止
        throw new RuntimeException(idGeneratorException.getMessage());
    }
    log.info("[ApplicationRunnerInit]---------current service node workerId:{}",workerId);
}

}

服务在启动过程中捕获异常,此时 redis中的 WorkerId自增ID值是68,请问这是什么问题 image

yitter commented 11 months ago

WorkerIdBitLength,默认值为6,决定WorkerId最大值为2^6-1=63。 所以,你要么控制传入的WorkerId不要超过63,要么将参数WorkerIdBitLength设置更大一些,具体规则,参考readme中的【参数设置】。