Распределённый генератор идентификаторов (алгоритм «снежинка» в версии SpringBoot)
Генератор распределённых идентификаторов:
Глобальный уникальный идентификатор используется как уникальный признак для различения данных. Он может быть использован в качестве номера заказа, идентификатора пользователя и т. д. Генератор идентификаторов — это инструмент для создания глобальных уникальных идентификаторов, который можно инкапсулировать в базовую службу для предоставления услуг другим бизнес-системам. Таким образом, этот проект представляет собой реализацию генератора идентификаторов на основе Springboot, позволяющую различным бизнес-системам вызывать его.
Существует множество алгоритмов генерации идентификаторов. В этом проекте строго соблюдается алгоритм «снежинки», открытый Twitter. Он представляет собой глобальный уникальный алгоритм идентификации с временной меткой. Существует фиксированный формат идентификатора, который выглядит следующим образом:
В корневом каталоге выполните команду maven:
mvn clean install -DskipTests -Dmaven.test.skip=true
В каталоге id-generate-rest/target вы найдёте заархивированный пакет, созданный после сборки, как показано на рисунке ниже:
![Snip20170901_21.png-69.6kB][1]
Найдите заархивированный файл, указанный красной линией, распакуйте его и поместите в локальный каталог, здесь я помещаю его в корневой каталог моего компьютера. Как показано на следующем рисунке:
![Snip20170901_22.png-14.4kB][2]
Перейдите в окно терминала, перейдите в каталог bin и выполните скрипт запуска start.sh: команда выглядит следующим образом:
./start.sh
ps -ef |grep restApplication
Если появится следующее изображение, это означает, что запуск проекта прошёл успешно:
![Snip20170901_24.png-288.7kB][3]
Я установил порт запуска равным 10010, а контекстное имя — myID.
Введите в браузере http://localhost:10010/myID/swagger-ui.html, и вы увидите интерфейс:
![Snip20170901_19.png-121kB][4]
Используйте Swagger для просмотра и тестирования четырёх API-интерфейсов springboot, которые будут подробно описаны ниже.
Четыре API:
Как показано на рисунке, просто нажмите кнопку «try it out», не вводя никаких параметров, и верните длинный идентификатор.
![Snip20170901_25.png-159.2kB][5]
Как показано на рисунке, вы можете использовать идентификатор, сгенерированный предыдущим API, скопировать его в поле ввода, а затем напрямую нажать кнопку «try it out». Возвращается строка json, включая временную метку, идентификатор машины и порядковый номер.
![Snip20170901_26.png-155.5kB][6] ![Snip20170901_27.png-74.3kB][7]
Введите строку json, содержащую временную метку, идентификатор машины и порядковый номер, и верните длинный идентификатор. Как и предыдущий API, он является обратной операцией.
![Snip20170901_28.png-171kB][8] ![Snip20170901_29.png-78.2kB][9]
Введите значение временной метки, чтобы вернуть конкретное значение даты в формате гггг-ММ-дд ЧЧ:мм:сс. Рекомендуется ввести значение временной метки из строки json, возвращаемой предыдущим API.
![Snip20170901_30.png-165.5kB][10]
Содержимое скрипта запуска:
#!/bin/sh
echo -------------------------------------------
echo start server
echo -------------------------------------------
# Устанавливаем путь к коду проекта
export CODE_HOME="/id-generate-rest"
# Путь к журналу
export LOG_PATH="/Users/wujunshen/Downloads/id-generator"
mkdir -p $LOG_PATH
# Устанавливаем путь зависимости
export CLASSPATH="$CODE_HOME/classes:$CODE_HOME/lib/*"
# Исполняемый файл java
export _EXECJAVA="$JAVA_HOME/bin/java"
# Параметры запуска JVM
export JAVA_OPTS="-server -Xms8m -Xmx2048m "
# Информация о сервере
export SERVER_INFO="-Dserver.port=10010 -Dserver.contextPath=/myID -Dserver.docBase=$CODE_HOME"
# Класс запуска
export MAIN_CLASS=com.wujunshen.rest.RestApplication
nohup $_EXECJAVA $JAVA_OPTS -classpath $CLASSPATH $SERVER_INFO $MAIN_CLASS >$LOG_PATH/id-generator.log 2>&1 &
Код CODE_HOME и LOG_PATH можно настроить в соответствии с путём распаковки zip-файла. Включая последнюю строку имени файла журнала, все они могут быть настроены. Класс запуска — это класс запуска springboot, и соответствующие параметры JVM также могут быть изменены в соответствии с конфигурацией оборудования вашего компьютера. Кроме того, в сценарии есть порт и контекст, которые необходимо согласовать со значениями server.port и server.context-path в файле /id-generate-rest/src/main/resources/application.properties проекта.
Содержание сценария остановки:
#Путь к журналу
export LOG_PATH="/Users/wujunshen/Downloads/id-generator"
mkdir -p $LOG_PATH
# Класс запуска
export MAIN_CLASS=com.wujunshen.rest.RestApplication
echo -------------------------------------------
echo stop server
#Все связанные процессы
PIDs=`jps -l | grep $MAIN_CLASS | awk '{print $1}'`
#Остановка процесса
if [ -n "$PIDS" ]; then
for PID in $PIDS; do
kill $PID
echo "kill $PID"
done
fi
#Подождите 50 секунд
for i in 1 10; do
PIDS=`jps -l | grep $MAIN_CLASS | awk '{print $1}'`
if [ ! -n "$PIDS" ]; then
echo "stop server success"
echo -------------------------------------------
break
fi
echo "sleep 5s"
sleep 5
done
#Если ожидание в течение 50 секунд всё ещё не остановлено, убейте напрямую
PIDs=`jps -l | grep $MAIN_CLASS | awk '{print $1}'`
if [ -n "$PIDs" ]; then
for PID in $PIDs; do
kill -9 $PID
echo "kill -9 $PID"
done
fi
LOG_PATH и MAIN_CLASS и start.sh можно настроить согласованно. Другие настройки не требуются. [8]: http://static.zybuluo.com/coderush/r400llmy4tm7kbdm5l099vgg/Snip20170901_28.png [9]: http://static.zybuluo.com/coderush/wykjq1qbxxxxurwi0llxpyr3/Snip20170901_29.png [10]: http://static.zybuluo.com/coderush/9r4o7hqt4a364hehknlgiix0/Snip20170901_30.png
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )