Распределённый генератор идентификаторов, основанный на алгоритме SnowFlake от Twitter. Поддерживает ручное или автоматическое распределение workerId через Zookeeper. Простая конфигурация и лёгкость в использовании. Генерируемые идентификаторы обладают следующими свойствами: глобальная уникальность, грубая упорядоченность и возможность обратного декодирования.
Поле | Бит | Описание |
---|---|---|
Время | 41 | Может использоваться в течение примерно 69 лет. |
Дата-центр | 5 | Можно развернуть до 32 центров данных. |
Рабочий узел | 5 | В одном дата-центре можно развернуть до 32 сервисов. |
Порядковый номер | 12 | Теоретически возможно сгенерировать до 4095 уникальных идентификаторов за одно и то же мгновение (в миллисекундах). |
Поле | Бит | Описание |
---|---|---|
Время | 31 | Может использоваться в течение примерно 68 лет. |
Дата-центр | 5 | Можно развернуть до 32 центров данных. |
Рабочий узел | 5 | В одном дата-центре можно развернуть до 32 сервисов. |
Порядковый номер | 22 | Теоретически возможно сгенерировать до 4 194 303 уникальных идентификатора за одну и ту же секунду. |
<repositories>
<repository>
<id>iwanttomakemoney_admin</id>
<url>https://gitee.com/iwanttomakemoney_admin/maven/raw/master/repository</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.lxm</groupId>
<artifactId>id-generator-interface</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>com.lxm</groupId>
<artifactId>id-generator-core</artifactId>
<version>2.3</version>
</dependency>
</dependencies>
@EnableIdGenerator
к классу запуска, например:@SpringBootApplication
@EnableIdGenerator
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
<bean id="appProperty"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<array>
<value>classpath:application.properties</value>
</array>
</property>
</bean>
@EnableIdGenerator
, например:@Configuration
@EnableIdGenerator
public class WebConfigure {
// other configure
}
Добавьте одноэлементный класс инструментов в проект, например:
public class IdUtil {
private static IdUtil _instance = new IdUtil();
private static IdService idService;
public static IdService service() {
return idService;
}
private IdUtil() {
// 使用提供的工厂类生成idService
idService = IdServiceFactoryBean.idService(new AutoConfiguration());
}
}
В необходимых местах внедрите сервис, например:
@Service
class DemoService {
@Autowired
private IdService idService;
public void test() {
// 通过自动装配提供的服务
long id1 = idService.genId();
// 通过单例的形式提供的服务
long id2 = IdUtil.service().genId();
...
}
}
// 生成id
long idService.genId();
// 批量生成id
long[] batchGenId(int count);
// 解析id
Id decode(long id);
// 手动生成id
long encode(long time, long dataCenterId, long workerId, long seq);
// 解析id中的时间戳
Date transTime(long time);
Свойство | Тип | Значение по умолчанию | Описание |
---|---|---|---|
id.zookeeper.enable | Boolean | false | Включает ли Zookeeper распределение workerId. По умолчанию используется ручное распределение workerId; если установлено значение true, необходимо предварительно подготовить хотя бы один сервер Zookeeper. |
id.zookeeper.serverLists | String | null | Список серверов Zookeeper, включая IP-адрес и номера портов. Несколько адресов разделяются запятыми, например: host1:2181,host2:2181 |
id.zookeeper.digest | String | null | Пароль для подключения к Zookeeper. Если не указано, проверка подлинности не требуется. |
id.zookeeper.namespace | String | "id-generator" | Пространство имён Zookeeper. |
id.zookeeper.baseSleepTime | Integer | 1000 | Начальное значение интервала ожидания при повторных попытках в миллисекундах. |
id.zookeeper.maxSleepTime | Integer | 3000 | Максимальное значение интервала ожидания при повторных попытках в миллисекундах. |
id.zookeeper.maxRetries | Integer | 3 | Максимальное количество попыток. |
id.zookeeper.sessionTimeout | Integer | 60000 | Время ожидания сеанса в миллисекундах. |
id.zookeeper.connectionTimeout | Integer | 15000 | Таймаут соединения в миллисекундах. |
id.type.second=false | Boolean | false | true — уровень секунд, false — уровень миллисекунд. |
id.workerId | Integer | 0 | Ручной идентификатор рабочей машины, действителен, когда id.zookeeper.enable=false. |
id.datacenterId | Integer | -1 | Ручной идентификатор центра обработки данных, если не указан, автоматически назначается уникальный номер на основе MAC-адреса. |
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.