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

OSCHINA-MIRROR/fetech-platform-melon-idfactory

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

melon-idfactory

Фабрика первичных ключей, предоставляющая услуги по генерации ID и гарантирующая их уникальность.

Использование motan rpc + restful интерфейса обеспечивает простоту настройки и развёртывания.

Предлагаемые услуги:

  1. Предоставление уникальных упорядоченных 64-битных целых чисел (рекомендуется).
  2. Предоставление автоматически увеличивающихся целых чисел для идентификаторов.
  3. Предоставление 32-битных UUID.

Использование:

1. Зависимости:

Для работы проекта требуются JDK 1.8 и MongoDB. Инструкции по установке можно найти в интернете.

2. Загрузка версии:

Получите последнюю версию пакета услуг. Текущая версия — v1.0.0, доступна по ссылке.

Распакуйте файл melon-idfactory-server-assembly.tar.gz. Каталог содержит следующие файлы:

  • bin — исполняемые скрипты для Windows и Linux.
  • conf — файлы конфигурации.
  • lib — библиотеки проекта.

3. Конфигурация:

Настройка 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

4. Запуск:

Перейдите в каталог server/bin и запустите скрипт запуска.

  • start.bat — для Windows.
  • start.sh — для Linux.

PS: melon-idfactory-client.jar — это тестовый пакет вызовов, который предоставляет обёртку для вызовов motan rpc. Пользователи Spring могут ссылаться на него напрямую. Другие пользователи могут просто запустить сервер и вызвать restful интерфейс.

Вызовы:

Вызовы 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

В коде можно напрямую внедрить IdFactoryClient:

@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") + "");
}

Описание интерфейса IdFactoryClient

/**
 * Получение самоинкрементного первичного ключа
 *
 * @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);

Другие примечания

  1. 64-разрядный упорядоченный идентификатор использует Baidu uid-generator, который является реализацией алгоритма snowflake от Twitter.
  1. Зачем использовать 64d-битные упорядоченные идентификаторы

Особое примечание, используйте melon (дыня) для разработки фреймворка

Серия дынь — это не изобретение и творение, а просто попытка сделать вещи немного проще и дать пользователям немного сладости.

melon портал

// TODO В настоящее время самоинкрементирующиеся целые числа ID не поддерживают распределённое развёртывание, в будущем будет улучшено.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
LGPL-3.0
Отмена

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/fetech-platform-melon-idfactory.git
git@api.gitlife.ru:oschina-mirror/fetech-platform-melon-idfactory.git
oschina-mirror
fetech-platform-melon-idfactory
fetech-platform-melon-idfactory
master