package tech.powerjob.server.core.uid; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import tech.powerjob.server.remote.server.self.ServerInfoService; /** * 唯一ID生成服务,使用 Twitter snowflake 算法 * 机房ID:固定为0,占用2位 * 机器ID:由 ServerIdProvider 提供 * * @author tjq * @since 2020/4/6 */ @Slf4j @Service public class IdGenerateService { private final SnowFlakeIdGenerator snowFlakeIdGenerator; private static final int DATA_CENTER_ID = 0; public IdGenerateService(ServerInfoService serverInfoService) { long id = serverInfoService.fetchCurrentServerInfo().getId(); snowFlakeIdGenerator = new SnowFlakeIdGenerator(DATA_CENTER_ID, id); log.info("[IdGenerateService] initialize IdGenerateService successfully, ID:{}", id); } /** * 分配分布式唯一ID * @return 分布式唯一ID */ public long allocate() { return snowFlakeIdGenerator.nextId(); } }