melon-idfactory
Фабрика первичных ключей, предоставляющая услуги по генерации ID и гарантирующая их уникальность.
Использование motan rpc + restful интерфейса обеспечивает простоту настройки и развёртывания.
Для работы проекта требуются JDK 1.8 и MongoDB. Инструкции по установке можно найти в интернете.
Получите последнюю версию пакета услуг. Текущая версия — v1.0.0, доступна по ссылке.
Распакуйте файл melon-idfactory-server-assembly.tar.gz. Каталог содержит следующие файлы:
Настройка melon-idfactory проста и предоставляет значения по умолчанию. Для использования достаточно обратить внимание на несколько параметров.
conf.properties
Конфигурация подключения к MongoDB
mongo.host=127.0.0.1 mongo.port=27017 # По умолчанию "27017" mongo.databaseName=MelonIdFactory # По умолчанию MelonMongoDbDefault
Настройки uid-generator, связанные с 64-битными упорядоченными ID. Можно не изменять, использовать значения по умолчанию
Подробные инструкции по настройке uid-generator см. в README.zh_cn.md
uid.boostPower=3 uid.paddingFactor=50 uid.scheduleInterval=60 uid.timeBits=28 uid.workerBits=22 uid.seqBits=13 uid.epochStr=2017-10-1
Настройка RPC удалённого вызова с использованием motan для предоставления rpc-сервисов и restful-интерфейса
motan.service.export=8002 # Порт для экспорта Java-сервиса, по умолчанию "8002" motan.restful.export=8004 # Порт для экспорта restful-интерфейса, по умолчанию "8004"
Поддержка Java-сервисом использования zookeeper или consul в качестве реестра. Значения по умолчанию — прямое подключение, можно не настраивать
motan.registry.regProtocol=zookeeper motan.registry.address=127.0.0.1:2181
Перейдите в каталог server/bin и запустите скрипт запуска.
PS: melon-idfactory-client.jar — это тестовый пакет вызовов, который предоставляет обёртку для вызовов motan rpc. Пользователи Spring могут ссылаться на него напрямую. Другие пользователи могут просто запустить сервер и вызвать restful интерфейс.
Ссылайтесь на melon-idfactory-client.jar или загрузите JAR-файл напрямую, доступный по ссылке. В настоящее время поддерживается только проект Spring, но его можно расширить. Добавьте следующую конфигурацию в файл конфигурации spring вашего проекта:
<context:component-scan base-package="com.fetech"/>
<bean id="propertyConfigurer" class="com.fetech.melon.context.property.MelonPropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:META-INF/melon/idfactory_conf.properties</value>
</list>
</property>
</bean>
conf.properties
Конфигурационные параметры RPC-сервиса без использования реестра
motan.referer.directUrl=127.0.0.1:8002
Если сервис использует реестр для публикации, необходимо настроить соответствующий адрес реестра
motan.registry.regProtocol=zookeeper motan.registry.address=127.0.0.1:2181
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:META-INF/spring/spring-test-idfactory-client.xml"})
public class TestIF {
@Resource
private IdFactoryClient idFactoryClient;
@Test
public void uuid() {
LogUtil.debug("uuid:");
for (int i = 0; i < 10; i++) {
LogUtil.debug(idFactoryClient.getUUID());
}
}
@Test
public void uid() {
LogUtil.debug("64 uid:");
for (int i = 0; i < 10; i++) {
long id = idFactoryClient.get64Uid();
LogUtil.debug(id + "");
LogUtil.debug(idFactoryClient.parse64Uid(id));
}
}
@Test
public void incrementId() {
LogUtil.debug("auto increment id:");
for (int i = 0; i < 10; i++) {
LogUtil.debug(idFactoryClient.getIncrementId("test_1") + "");
}
}
@Test
public void incrementId2() {
LogUtil.debug("auto increment2 id:");
boolean
``` ```
ret = idFactoryClient.initIncrementId("test_2", 10);
Assert.assertTrue(ret);
for (int i = 0; i < 10; i++) {
LogUtil.debug(idFactoryClient.getIncrementId("test_2") + "");
}
/**
* Получение самоинкрементного первичного ключа
*
* @param key первичный ключ, обычно можно использовать имя таблицы
* @return long exp:1, 2, 3...
*/
long getIncrementId(String key);
/**
* Ручная инициализация самоинкрементного первичного ключа, обычно достаточно инициализировать один раз, если не инициализировано, по умолчанию getIncrementId начинается с 1
*
* @param key первичный ключ, обычно можно использовать имя таблицы
* @param start значение компонента, по умолчанию равно 0, начиная с 1
* @return boolean успешная или неудачная инициализация
*/
boolean initIncrementId(String key, long start);
/**
* Получить 32-битный UUID
*
* @return String exp:ea5846a348764fc4a7311d6a340e9d14, ae2653087ec84dd59b3adcf4c307cf97...
*/
String getUUID();
/**
* Получить упорядоченный 64-битный ID, рекомендуется использовать
*
* @return long exp:69728553533104128, 69728553533104129, 69728553533104130...
*/
long get64Uid();
/**
* Разобрать упорядоченный 64-битный идентификатор
*
* @param uid упорядоченный 64-битный идентификатор
* @return json exp:
* {
* "UID": "69728553533104129",
* "timestamp": "2017-11-08 11:42:48",
* "workerId": "87",
* "sequence": "1"
* }
*/
String parse64Uid(long uid);
Серия дынь — это не изобретение и творение, а просто попытка сделать вещи немного проще и дать пользователям немного сладости.
// TODO В настоящее время самоинкрементирующиеся целые числа ID не поддерживают распределённое развёртывание, в будущем будет улучшено.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )