1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/simpleweb-id-generator

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 24.11.2024 21:38 42b0fd8

Генератор идентификаторов (ID-генератор)

Проект

Распределённый генератор идентификаторов, основанный на алгоритме SnowFlake от Twitter. Поддерживает ручное или автоматическое распределение workerId через Zookeeper. Простая конфигурация и лёгкость в использовании. Генерируемые идентификаторы обладают следующими свойствами: глобальная уникальность, грубая упорядоченность и возможность обратного декодирования.

Структура данных

Мгновение
Поле Бит Описание
Время 41 Может использоваться в течение примерно 69 лет.
Дата-центр 5 Можно развернуть до 32 центров данных.
Рабочий узел 5 В одном дата-центре можно развернуть до 32 сервисов.
Порядковый номер 12 Теоретически возможно сгенерировать до 4095 уникальных идентификаторов за одно и то же мгновение (в миллисекундах).
Секунда
Поле Бит Описание
Время 31 Может использоваться в течение примерно 68 лет.
Дата-центр 5 Можно развернуть до 32 центров данных.
Рабочий узел 5 В одном дата-центре можно развернуть до 32 сервисов.
Порядковый номер 22 Теоретически возможно сгенерировать до 4 194 303 уникальных идентификатора за одну и ту же секунду.

Установка

  1. Добавьте следующий репозиторий в файл pom.xml:
<repositories>
    <repository>
        <id>iwanttomakemoney_admin</id>
        <url>https://gitee.com/iwanttomakemoney_admin/maven/raw/master/repository</url>
    </repository>
</repositories>
  1. Импортируйте следующие зависимости:
<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>

Конфигурация

Для проектов на основе Spring Boot
  1. Установите необходимые параметры в файле конфигурации YAML или property. (Этот шаг не является обязательным, и если он пропущен, будут использоваться значения по умолчанию.)
  2. Добавьте аннотацию @EnableIdGenerator к классу запуска, например:
@SpringBootApplication
@EnableIdGenerator
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}
Для обычных проектов Spring
  1. Создайте файл конфигурации свойств в пути к классам и установите необходимые параметры (этот шаг не является обязательным, и если он пропущен, будут использоваться значения по умолчанию).
  2. В файле xxxContext.xml добавьте следующую конфигурацию для распознавания параметров, установленных на предыдущем шаге:
<bean id="appProperty"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <array>
            <value>classpath:application.properties</value>
        </array>
    </property>
</bean>
  1. Создайте класс конфигурации и добавьте аннотацию @EnableIdGenerator, например:
@Configuration
@EnableIdGenerator
public class WebConfigure {
    // other configure 
}
Для не-Spring проектов

Добавьте одноэлементный класс инструментов в проект, например:

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();
        ...
    }
}

API

// 生成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-адреса.
1
https://api.gitlife.ru/oschina-mirror/simpleweb-id-generator.git
git@api.gitlife.ru:oschina-mirror/simpleweb-id-generator.git
oschina-mirror
simpleweb-id-generator
simpleweb-id-generator
master