非必填 | 8080 |
Можно напрямую запустить изменённый файл scripts/build.sh
, например:
sh scripts/build.sh dev id-server
sh scripts/build.sh dev id-portal
Необязательные параметры:
$1: dev/test/pre/prod, представляют собой среду разработки/тестирования/предварительную/производственную.
$2: id-server/id-portal, представляют два модуля moudle, то есть для какого модуля упаковывать, конфигурация — это значение, соответствующее введённому dev/test/pre/prod.
После завершения компиляции и упаковки можно сразу выполнить скрипт запуска следующим образом:
sh id-server/scripts/startup.sh
sh id-portal/scripts/startup.sh
Проверьте, успешно ли запущен id-сервер (также можно проверить через журнал, расположение журнала соответствует значению id_server_log_dir
).
curl http(s)://ip:port/health/check
Ответ должен быть таким:
{
"code": 0,
"msg": "Processed successfully",
"data": 666
}
Убедитесь, что id-портал успешно запущен (также можно проверить через журнал, местоположение журнала соответствует значению id_portal_log_dir
):
Откройте http(s)://ip:port
прямо в браузере, появится следующая страница:
id-portal
.id-portal
.Существует два способа использования: Server и Sdk. Использование сервера очень просто, он предоставляет HTTP-интерфейс для получения идентификатора извне. Sdk требует, чтобы бизнес-система зависела от jar-пакета, а затем вызывала метод для получения идентификатора. Ниже подробно описаны два метода использования и различия.
Независимо от того, какой алгоритм используется для получения идентификатора, необходимо добавить следующий заголовок, иначе будет сообщено об ошибке -4, указывающей на отсутствие разрешения:
tinyservice-id-token=token (токен получен из меню токенов в id-portal)
# Получить один
GET http(s)://ip:port/segment/{бизнес-тип}
# Пакетное получение
GET http(s)://ip:port/segment/{бизнес-тип}/{количество полученных идентификаторов}
# Получить один
GET http(s)://ip:port/snowflake/{бизнес-тип}
# Пакетное получение
GET http(s)://ip:port/snowflake/{бизнес-тип}/{полученное количество идентификаторов}
<dependency>
<groupId>com.gitee.tinyservices</groupId>
<artifactId>id-sdk</artifactId>
<version>1.0.0</version>
</dependency>
Добавьте файл конфигурации с именем tinyservices_id_sdk.properties
в каталог classpath
(обычно resources
для проектов springboot), который содержит следующие настройки:
# Адрес id-сервера, несколько адресов разделяются запятыми, случайным образом выбирается один адрес для использования
tinyservices.id.server=http://localhost:9990
# Токен доступа к бизнес-типу. Можно настроить/просмотреть в id-portal
tinyservices.id.token=U2FsdGVkX18uip/K7pLiM4ZD5RKrHacD64eKWCNfmW4=
// IdSdkTypeEnum.SEGMENT режим сегмента
// IdSdkTypeEnum.SNOWFLAKE режим снежинки
AbstractIdSdk idSdk = IdSdkFactory.getInstance().getIdSdk(IdSdkTypeEnum.SEGMENT).registerConfigSupport();
// Получить идентификатор
for (int i = 0; i < 10; i ++) {
Long id = idSdk.getId("бизнес-тип");
}
Настройка | Значение настройки | Требуется | Значение по умолчанию |
---|---|---|---|
tinyservices.id.token | токен, полученный из id-portal | требуется | нет |
tinyservices.id.server | список служб id, разделенных запятыми | требуется | нет |
tinyservices.id.readTimeout | время ожидания для sdk и сервера (мс) | не требуется | 5000 мс |
tinyservices.id.connectTimeout | время подключения для sdk и сервера (мс) | не требуется | 5000 мс |
tinyservices.id.snowflake.epoch | начало времени для алгоритма снежинки | не требуется | 1648742400000L (2022-04-01 00:00:00) |
Режим сегмента должен планировать размер шага в соответствии с собственным объёмом бизнеса, например, если объём бизнеса составляет 10 000 QPS, а размер шага установлен на 10, возможно, что при внезапном увеличении трафика часть идентификаторов будет нулевой, потому что размер шага слишком мал, и оба буфера заполнены мгновенным трафиком.
Если требования к производительности очень высоки, рекомендуется использовать способ Sdk, этот способ напрямую зависит от jar-файла для вызова локального метода генерации идентификатора, поскольку способ Sdk исключает сетевые накладные расходы, теоретическая пропускная способность может достигать миллионов.
Если требования к производительности не слишком высоки, вы можете использовать способ сервера, напрямую запрашивая интерфейс HTTP, уменьшая зависимости системы. spring.datasource.driver=com.mysql.cj.jdbc.Driver;spring.datasource.url=jdbc:mysql://localhost:3306/ts_id?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT;spring.datasource.username=root;spring.datasource.password=12345678;spring.datasource.initial-size=;spring.datasource.min-idle=;spring.datasource.max-active=;spring.datasource.max-wait=;
id_server_log_dir=/data/logs/id-server;server_port=9990;id_server_snowflake_mode=MYSQL;id_server_snowflake_port=8888;id_server_snowflake_epoch=1648742400000;id_server_snowflake_zkConnectionAddr=localhost:2181
Параметры соединения с базой данных, имя пользователя, пароль, порт и т. д. должны быть изменены в соответствии с вашей собственной средой.
1.2 id-portal
Добавьте следующие переменные среды:
spring.datasource.driver=com.mysql.cj.jdbc.Driver;spring.datasource.url=jdbc:mysql://localhost:3306/ts_id?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT;spring.datasource.username=root;spring.datasource.password=12345678;spring.datasource.initial-size=;spring.datasource.min-idle=;spring.datasource.max-active=;spring.datasource.max-wait=;id_portal_log_dir=/data/logs/id-portal;server_port=9990
Параметры соединения с базой данных, имя пользователя, пароль, порт и т.д. должны быть изменены в соответствии с вашей собственной средой.
Независимо от того, используете ли вы сегмент или токен, новые или изменённые конфигурации вступят в силу через одну минуту, то есть через одну минуту после этого конфигурация id-server станет доступной.
В настоящее время существует четыре встроенных режима: LOCAL (локальный файл), MYSQL, ZOOKEEPER и RECYCLABLE_ZOOKEEPER (с возможностью повторного использования workerId). Если вы хотите использовать другое промежуточное ПО в качестве центра регистрации, выполните следующие действия:
— Сначала создайте класс, который наследуется от AbstractIdSnowflakeHolder и переопределяет соответствующие методы. Вы можете обратиться к другим подклассам, таким как ZookeeperIdSnowflakeHolder.
— Затем добавьте соответствующий тип в перечисление IdSnowflakeHolderTypeEnum. Этот тип должен соответствовать конфигурации tinyservices.id.snowflake.mode.
— Наконец, измените метод IdSnowflakeHolderFactory#getIdSnowflakeHolder, добавив раздел case для нового типа перечисления.
Запуск режима RECYCLABLE_ZOOKEEPER занимает некоторое время. В этом режиме при запуске создаются 1023 постоянных узла в Zookeeper в качестве пула workerId для повторного использования. Поскольку это постоянные узлы, создание занимает много времени при первом запуске, но последующие запуски будут быстрее, поскольку узлы уже существуют.
Если во время запуска проекта возникает ошибка драйвера MySQL, вы можете изменить версию самостоятельно. В настоящее время встроенная версия — 8.0.21, которая находится в корневом файле pom.xml. Вот пример:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
<scope>runtime</scope>
</dependency>
После изменения не забудьте также обновить конфигурацию id_server_config_db_driver в файле scripts/build.sh или в переменной среды id_server_config_db_driver.
Если вы не хотите использовать стандартное имя файла конфигурации tinyservices_id_sdk.properties, можно выполнить следующие шаги:
AbstractIdSdk idSdk = IdSdkFactory.getInstance().getIdSdk(IdSdkTypeEnum.SNOWFLAKE, "Пользовательское имя файла конфигурации.properties").registerConfigSupport();
// Получение идентификатора
for (int i = 0; i < 10; i ++) {
Long id = idSdk.getId("Тип бизнеса");
}
Если вы не хотите использовать файл конфигурации, можно сделать следующее:
/**
* Можно выбрать, чтобы переопределить следующие пять методов:
* String getBizToken();
* String getServerUrl();
* int getReadTimeout();
* int getConnectTimeout();
* long getEpoch();
*/
public class CustomIdConfigSupport extends AbstractIdConfigSupport {
@Override
public String getServerUrl() {
// Получить через центр конфигурации
return null;
}
@Override
public String getBizToken() {
// Получить через центр конфигурации
return null;
}
// ... Опустить другие необязательные методы для переопределения
}
AbstractIdSdk idSdk = IdSdkFactory.getInstance().getIdSdk(IdSdkTypeEnum.SNOWFLAKE).registerConfigSupport(new CustomIdConfigSupport());
// Получение идентификатора
for (int i = 0; i < 10; i ++) {
Long id = idSdk.getId("Тип бизнеса");
}
Проблема: в режиме sdk один файл конфигурации позволяет настроить только один токен. Если проект хочет получить токены для разных типов бизнеса, как это сделать?
Решение: есть два способа решить эту проблему:
Один тип бизнеса может поддерживать несколько токенов. Можно настроить несколько общих токенов для всех типов бизнеса. Однако бэкэнд в настоящее время позволяет только генерировать токены, а не настраивать их. Для этого можно разветвить id-portal и разрешить ввод токенов или вручную изменить данные таблицы ts_id_worker_id.
Или используйте пользовательский файл конфигурации. Например, если вам нужно получить идентификаторы для двух типов бизнеса:
Для первого типа бизнеса:
AbstractIdSdk idSdk = IdSdkFactory.getInstance().getIdSdk(IdSdkTypeEnum.SEGMENT, "sdk_1.properties").registerConfigSupport();
idSdk.getId("test1");
Для второго типа бизнеса:
AbstractIdSdk idSdk = IdSdkFactory.getInstance().getIdSdk(IdSdkTypeEnum.SEGMENT, "sdk_2.properties").registerConfigSupport();
idSdk.getId("test2");
``` 8. Заключение
Если ваша компания присоединилась к tinyservices-id, буду рад получить от вас сообщение или комментарий с названием вашей компании, ваша поддержка — это моя вечная движущая сила.
При возникновении любых вопросов, пожалуйста, создайте issue.
https://gitee.com/tinyservices/tinyservices-id/issues
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )