Проект Tansci Cloud основан на микросервисной архитектуре, использующей SpringCloud Alibaba + Vue3.2 + Element Plus.
Этот проект включает необходимые компоненты для разработки распределённых микросервисных приложений, что облегчает разработчикам использование этих компонентов через модель программирования Spring Cloud для создания распределённых приложений.
С использованием Spring Cloud Alibaba вам достаточно добавить несколько аннотаций и минимальную конфигурацию, чтобы интегрировать Spring Cloud приложение с решением Alibaba для микросервисов, и использовать промежуточные компоненты Alibaba для быстрого создания распределённых приложений.
Проект разделён на микросервисную версию и монолитную версию:
Монолитная версия:
Схема архитектуры SpringCloud
Функциональность архитектуры находится в разработке...
Название | Версия | Описание |
---|---|---|
JDK | 1.8+ | Обязательное требование |
MySQL | 5.7+ | База данных |
Redis | 5.0+ | База данных NoSQL |
Nginx | 1.16+ | Перенаправление запросов, обратный прокси |
Maven | 3.8+ | Сборка проекта, управление |
Git | 2.14+ | Управление версиями проекта |
Node | 14.16+ | Требования к окружению фронтенда |
├─docs # Документация, включая SQL-скрипты ├─tansci-api # Модуль API ├─tansci-auth # Безопасность и аутентификация ├─tansci-common # Общие модули │ ├─common-core # Общие ядра │ ├─common-database # Общие источники данных │ ├─common-web # Общие модули WEB │ └─common-redisson # Распределенные блокировки ├─tansci-gateway # Шлюз ├─tansci-modules # Модуль Service │ ├─tansci-admin-service │ └─tansci-scheduled-service └─tansci-view # Фронтенд проекта ├─public └─src ├─api # Конфигурация API сервиса ├─assets # Статические ресурсы ├─components # Общие компоненты ├─router # Маршрутизация ├─store # Упаковка Pinia ├─styles # Общие стили ├─types # ts ├─utils # Инструменты └─views # Модули функциональности
Запуск backend
Создать базу данных, выполнить docs/sql/tansci_cloud.sql
, docs/sql/tansci_config.sql
SQL-инициализацию данных;
Порядок запуска модулей:
Остальные модули можно запускать в произвольном порядке
Запуск frontend
npm install # Инициализация проекта
npm run dev # Запуск проекта
```После успешного запуска проекта перейти по адресу: [http://localhost:3000](http://localhost:3000)
> Тестовый пользователь admin / admin123
----
## Настройка Nacos
Ссылка для загрузки: [https://github.com/alibaba/nacos/releases](https://github.com/alibaba/nacos/releases)
> Пример для версии nacos 2.0.4
#### 1. Операционная система Windows
Измените конфигурационный файл `nacos-server-2.0.4/conf/application.properties`
```yml
#*************** Настройки, связанные с модулем конфигурации ***************#
### Если использовать MySQL в качестве источника данных:
spring.datasource.platform=mysql
### Количество баз данных:
db.num=1
### URL подключения к базе данных:
db.url.0=jdbc:mysql://127.0.0.1:3306/tansci_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
Запустите nacos-server-2.0.4/bin/startup.cmd
для запуска Nacos.
# linux
cd /usr/local/nacos/bin
./startup.sh -m standalone
Перейти по адресу в браузере: http://localhost:8848/nacos
По умолчанию имя пользователя и пароль
nacos/nacos
Если использовать тестовую среду в качестве центра регистрации, создайте собственное пространство имен для регистрации сервиса, чтобы избежать использования несколькими пользователями.
Ссылка для загрузки: https://github.com/alibaba/Sentinel/releases
Пример для версии sentinel 1.8.3
Запустите команду:
# windows
java -Dserver.port=8858 -Dcsp.sentinel.dashboard.server=localhost:8718 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.3.jar
```# Linux
nohup java -Dserver.port=8858 -Dcsp.sentinel.dashboard.server=localhost:8718 -Dproject.name=sentinel-dashboard -jar /usr/local/sentinel/sentinel-dashboard-1.8.3.jar &
Перейти по адресу в браузере: [http://localhost:8080](http://localhost:8080)
> По умолчанию имя пользователя и пароль `sentinel/sentinel`
>
> Где -Dserver.port=8080 используется для указания порта консоли Sentinel в 8080.
>
> Внимание: запуск консоли Sentinel требует версии JDK 1.8 или выше.----
## Конфигурация Seata
Официальный сайт: [https://seata.io](https://seata.io/)
Ссылка для загрузки: [https://seata.io/zh-cn/blog/download.html](https://seata.io/zh-cn/blog/download.html)
> Пример для версии seata 1.5.2
**Изменение конфигурации**
Измените файл конфигурации `application.yml` в папке conf:
```yaml
server:
port: 7091
spring:
application:
name: seata-server
logging:
config: classpath:logback-spring.xml
file:
path: ${user.home}/logs/seata
extend:
logstash-appender:
destination: 127.0.0.1:4560
kafka-appender:
bootstrap-servers: 127.0.0.1:9092
topic: logback_to_logstash
console:
user:
username: seata
password: seata
```seata:
config:
# поддерживаемые: nacos, consul, apollo, zk, etcd3
type: nacos
nacos:
server-addr: 127.0.0.1:8848
namespace: d01a5728-d581-438a-a0e8-e180a08f1e6d
group: SEATA_GROUP
username: nacos
password: nacos
data-id: seataServer.properties
registry:
# поддерживаемые: nacos, eureka, redis, zk, consul, etcd3, sofa
type: nacos
preferred-networks: 30.240.*
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
group: SEATA_GROUP
namespace: d01a5728-d581-438a-a0e8-e180a08f1e6d
cluster: default
username: nacos
password: nacos
store: # этот параметр не играет большой роли, так как конфигурация базы данных будет вновь импортирована из конфигурации nacos
# поддерживаемые: file, db, redis
mode: db
db:
datasource: druid
db-type: mysql
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/tansci_seata?rewriteBatchedStatements=true
user: root
password: weqfd4312
min-conn: 5
max-conn: 100
global-table: global_table
branch-table: branch_table
lock-table: lock_table
distributed-lock-table: distributed_lock
query-limit: 100
max-wait: 5000
# server:
# service-port: 8091 # Если не указано, используется значение '${server.port} + 1000'
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**
```Инициализация базы данных `docs/sql/tansci_seata.sql`.```**Конфигурация Nacos**
1. Добавить конфигурацию `service.vgroupMapping.default_tx_group`
```yaml
Data ID: service.vgroupMapping.default_tx_group
Group: SEATA_GROUP
# Конфигурационное содержимое:
default
seataServer.properties
Data ID: seataServer.properties
Group: SEATA_GROUP
# Конфигурационное содержимое
# Подробная информация о конфигурационных параметрах см. по адресу https://seata.io/zh-cn/docs/user/configurations.html
# Настройка транспорта, для клиента и сервера
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableTmClientBatchSendRequest=false
transport.enableRmClientBatchSendRequest=true
transport.enableTcServerBatchSendResponse=false
transport.rpcRmRequestTimeout=30000
transport.rpcTmRequestTimeout=30000
transport.rpcTcRequestTimeout=30000
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
transport.serialization=seata
transport.compressor=none
```# Настройка маршрутизации транзакций, только для клиента
service.vgroupMapping.default_tx_group=default
# Если вы используете регистратор, вы можете его игнорировать
service.default.grouplist=127.0.0.1:8091 # Измените на IP:PORT онлайн
service.enableDegrade=false
service.disableGlobalTransaction=false
```# Настройка правил транзакций, только для клиента
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=true
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.rm.sagaJsonParser=fastjson
client.rm.tccActionInterceptorOrder=-2147482648
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
client.tm.interceptorOrder=-2147482648
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
# Для режима транзакций TCC
tcc.fence.logTableName=tcc_fence_log
tcc.fence.cleanPeriod=1 час # Конфигурация правил журналирования для клиента и сервера
log.exceptionRate=100```# Конфигурация хранения транзакций, только для сервера. Значения конфигурации файла, базы данных и Redis являются необязательными.
store.mode=file
store.lock.mode=file
store.session.mode=file
# Используется для шифрования паролей
store.publicKey=
# Если `store.mode`, `store.lock.mode`, `store.session.mode` не равны `file`, можно удалить этот блок конфигурации.
store.file.dir=file_store/data
store.file.maxBranchSessionSize=16384
store.file.maxGlobalSessionSize=512
store.file.fileWriteBufferCacheSize=16384
store.file.flushDiskMode=async
store.file.sessionReloadReadSize=100
# Эти конфигурации требуются, если `store mode` равен `db`. Если `store.mode`, `store.lock.mode`, `store.session.mode` не равны `db`, можно удалить этот блок конфигурации.
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true # Измените на IP:PORT онлайн
store.db.user=root # Измените
store.db.password=root # Измените
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.distributedLockTable=distributed_lock
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
# Эти конфигурации требуются, если `store mode` равен `redis`. Если `store.mode`, `store.lock.mode`, `store.session.mode` не равны `redis`, можно удалить этот блок конфигурации.
store.redis.mode=single
store.redis.single.host=127.0.0.1
store.redis.single.port=6379
store.redis.sentinel.masterName=
store.redis.sentinel.sentinelHosts=
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
store.redis.password=
store.redis.queryLimit=100# Конфигурация правил транзакций, только для сервера
server.recovery.committingRetryPeriod=1000
server.recovery.asynchronousCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.distributedLockExpireTime=10000
server.xaerNotaRetryTimeout=60000
server.session.branchAsyncQueueSize=5000
server.session.enableBranchAsyncRemove=false
server.enableParallelRequestHandle=false# Настройка метрик, только для сервера
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898```
**Запуск**
```shell
# Windows
Перейти в директорию /bin и запустить seata-server.bat
# Linux
cd /bin
./seata-server.sh
Доступ по адресу: http://localhost:7091, seata/seata
Использование
В базе данных сервиса, который использует распределенные транзакции, создайте таблицу undo_log, добавьте аннотацию: @GlobalTransactional(rollbackFor = Exception.class).
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`context` varchar(128) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
Добавьте конфигурацию:
# конфигурация seata
seata:
enable: true
application-id: seata-admin-service
tx-service-group: default_tx_group
registry:
type: nacos
nacos:
application: seata-server # имя сервиса seata
# измените адрес для удаленного сервера
server-addr: ${NACOS-HOST:tansci-nacos}:${NACOS-PORT:8848}
group: SEATA_GROUP
config:
type: nacos
nacos:
# адрес nacos
server-addr: ${NACOS-HOST:tansci-nacos}:${NACOS-PORT:8848}
group: SEATA_GROUP
data-id: "seataServer.properties"
API документация доступна по адресу http://ip-шлюза:порт-шлюза/doc.html
Пример: http://127.0.0.1:9001/doc.html
- Метод запроса: POST
- Параметры запроса:
```json
{
"username": "admin",
"password": "admin123"
}
{
"code": 200,
"fail": false,
"message": "Операция выполнена успешно",
"result": {
"loginTime": "2022-02-16 11:58:29",
"token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJzdWJqZWN0IiwiZXhwIjoxNjQ0OTkxMTA4LCJwYXlsb2FkIjoie1wiYWNjb3VudE5vbkV4cGlyZWRcIjp0cnVlLFwiYWNjb3VudE5vbkxvY2tlZFwiOnRydWUsXCJhdXRob3JpdGllc1wiOlt7XCJhdXRob3JpdHlcIjpcIlJPTEVfTUVSQ0hBTlRTXCJ9XSxcImNyZWRlbnRpYWxzTm9uRXhwaXJlZFwiOnRydWUsXCJlbmFibGVkXCI6dHJ1ZSxcImlkXCI6XCJiYzNhYzI2ZTY5NzMxYjYxN2ViODAyNzQ0NTNmNmRiYVwiLFwicGFzc3dvcmRcIjpcIiQyYSQxMCR0bFdXZmpUT2JxTHNDNk9OcmhOTFwvLkdJcEFvRnUyMDVUWFBLNnhVUEhIcjFrQVwvcGFLNGxxXCIsXCJ1c2VybmFtZVwiOlwiYWRtaW5cIn0ifQ.8fXiQqlP9SLJK-_sPxws98VrUbDs5kvFysPmn3-Aqu8",
"username": "admin"
},
"success": true
}
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJzdWJqZWN0IiwiZXhwIjoxNjQ0ODk4NjY0LCJwYXlsb2FkIjoie1wiYWNjb3VudE5vbkV4cGlyZWRcIjp0cnVlLFwiYWNjb3VudE5vbkxvY2tlZFwiOnRydWUsXCJhdXRob3JpdGllc1wiOlt7XCJhdXRob3JpdHlcIjpcIlJPTEVfTUVSQ0hBTlRTXCJ9XSxcImNyZWRlbnRpYWxzTm9uRXhwaXJlZFwiOnRydWUsXCJlbmFibGVkXCI6dHJ1ZSxcImlkXCI6XCJiYzNhYzI2ZTY5NzMxYjYxN2ViODAyNzQ0NTNmNmRiYVwiLFwicGFzc3dvcmRcIjpcIiQyYSQxMCR0bFdXZmpUT2JxTHNDNk9OcmhOTFwvLkdJcEFvRnUyMDVUWFBLNnhVUEhIcjFrQVwvcGFLNGxxXCIsXCJ1c2VybmFtZVwiOlwiYWRtaW5cIn0ifQ.54GyxZs77ADpE_KYzdy8EAPOLYWL4AqcJDQId_SYCok
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )