1. Implementar el servidor tc de Seata
1.Descargar
Primero necesitamos descargar el paquete seata-server, la dirección es http://seata.io/zh-cn/blog/download.html
Por supuesto, también se preparan materiales previos a la clase:
2. Descomprimir
Descomprima este paquete zip en un directorio que no sea chino, su estructura de directorio es la siguiente:
3. Modificar la configuración
Modifique el archivo registro.conf en el directorio conf:
El contenido es el siguiente:
registro { # La clase del centro de registro del servicio tc, aquí seleccione nacos, también puede ser eureka, zookeeper, etc. type = "nacos" nacos { # El nombre del servicio seata tc registrado en nacos, puede personalizar aplicación = "seata-tc-server" serverAddr = "127.0.0.1:8848" grupo = "DEFAULT_GROUP" espacio de nombres = "" cluster = "SH" nombre de usuario = "nacos" contraseña = "nacos" } } config { # Cómo lea el archivo de configuración del servidor tc, aquí se lee desde el centro de configuración de nacos, de modo que si tc es un cluster, la configuración se puede compartir type = "nacos" # Configure la dirección de nacos y otra información nacos { serverAddr = " 127.0.0.1:8848" espacio de nombres = "" grupo = "SEATA_GROUP" nombre de usuario = "nacos" contraseña = "nacos" dataId = "seataServer.properties" } }
4. Agregar configuración en nacos
Tenga en cuenta que para permitir que el clúster de servicios tc comparta configuraciones, elegimos nacos como el centro de configuración unificado. Por lo tanto, el archivo de configuración del servidor seataServer.properties debe configurarse en nacos.
El formato es el siguiente:
El contenido de la configuración es el siguiente:
# 数据存储方式,db代表数据库 store.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 store.db.user=root store.db.password=123 store.db.minConn=5 store.db.maxConn=30 store.db.globalTable=global_table store.db.branchTable=branch_table store.db.queryLimit=100 store.db.lockTable=lock_table store.db.maxWait=5000 # 事务、日志等配置 server.recovery.committingRetryPeriod=1000 server.recovery.asynCommittingRetryPeriod=1000 servidor. recovery.rollbackingRetryPeriod=1000 servidor. recuperación.timeoutRetryPeriod=1000 server.maxCommitRetryTimeout=-1 server.maxRollbackRetryTimeout=-1 server.rollbackRetryTimeoutUnlockEnable=false server.undo.logSaveDays=7 server.undo.logDeletePeriod=86400000 # Método de transmisión de cliente y servidor transport.serialization =seata transport.compressor=none # Desactiva la función de métricas y mejora el rendimiento metrics.enabled=false metrics.registryType=compact metrics.exporterList=prometheus metrics.exporterPrometheusPort=9898
==La dirección de la base de datos, el nombre de usuario y la contraseña deben modificarse según la información de su propia base de datos. ==
5. Crear tablas de base de datos
Nota especial: cuando el servicio tc administra transacciones distribuidas, necesita registrar datos relacionados con las transacciones en la base de datos y debe crear estas tablas con anticipación.
Cree una nueva base de datos llamada seata y ejecute el archivo sql proporcionado en el material previo al curso:
Estas tablas registran principalmente transacciones globales, transacciones de sucursales e información de bloqueo global:
ESTABLECER NOMBRES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- 分支事务表 -- ------- --------------------- BOTAR TABLA SI EXISTE `branch_table`; CREAR TABLA `branch_table` ( `branch_id` bigint(20) NOT NULL, `xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `transaction_id` bigint(20) NULL DEFAULT NULL, `resource_group_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `resource_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `branch_type` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `status` tinyint(4) NULL DEFAULT NULL, `client_id` varchar(64) CONJUNTO DE CARACTERES utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `application_data` varchar(2000) CONJUNTO DE CARACTERES utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `gmt_create` datetime(6) NULL DEFAULT NULL, `gmt_modified` datetime(6) NULL DEFAULT NULL, PRIMARY KEY (`branch_id`) USANDO BTREE, INDEX `idx_xid`(`xid`) USANDO BTREE ) MOTOR = InnoDB JUEGO DE CARACTERES = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compacto ; -- ---------------------------- -- 全局事务表 ----------- ----------- ----------------- BOTAR TABLA SI EXISTE `global_table`; CREAR TABLA `global_table` ( `xid` varchar(128) CONJUNTO DE CARACTERES utf8 COLLATE utf8_general_ci NOT NULL, `gmt_modified` datetime NULL DEFAULT NULL, `transaction_id` bigint(20) NULL DEFAULT NULL, `status` tinyint(4) NOT NULL, `application_id` varchar(32) CONJUNTO DE CARACTERES utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `transaction_service_group` varchar(32) CONJUNTO DE CARACTERES utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `transaction_name` varchar(128) CONJUNTO DE CARACTERES utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `timeout` int(11) NULL DEFAULT NULL, `begin_time` bigint(20) NULL DEFAULT NULL, `application_data` varchar(2000) CONJUNTO DE CARACTERES utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `gmt_create` datetime NULL DEFAULT NULL, CLAVE PRIMARIA (`xid`) USANDO BTREE, ÍNDICE `idx_gmt_modified_status`(`gmt_modified`, `status`) USANDO BTREE, ÍNDICE `idx_transaction_id`(`transaction_id`) USANDO BTREE ) MOTOR = InnoDB JUEGO DE CARACTERES = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compacto; SET FOREIGN_KEY_CHECKS = 1;
6. Inicie el servicio TC
Ingrese al directorio bin y ejecute seata-server.bat en él:
Después de un inicio exitoso, el servidor seata debería haberse registrado en el centro de registro de nacos.
Abra el navegador, visite la dirección de nacos: http://localhost:8848 y luego ingrese a la página de lista de servicios, puede ver la información del servidor seata-tc:
2. Asiento de integración de microservicios
1.Introducir dependencias
Primero, necesitamos introducir la dependencia seata en el microservicio:
<dependencia> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-seata</artifactId> <exclusiones> <!--版本较低,1.3.0,因此排除-- > <exclusion> <artifactId>seata-spring-boot-starter</artifactId> <groupId>io.seata</groupId> </exclusion> </exclusions> </dependency> <!--seata starter Elemento 1.4.2版本--> <dependencia> <groupId>io.seata</groupId> <artifactId>seata-spring-boot-starter</artifactId> <versión>${seata.versión}</versión > </dependencia>
2. Modificar el archivo de configuración
Debe modificar el archivo application.yml y agregar algunas configuraciones:
seata: registro:# Configuración del centro de registro del servicio TC. El microservicio va al centro de registro para obtener la dirección del servicio TC en base a esta información.# Consulte la configuración en el propio registro.conf del servicio TC tipo: nacos nacos:# tc server-addr: 127.0.0.1: 8848 espacio de nombres: "" grupo: DEFAULT_GROUP aplicación: seata-tc-server # El nombre del servicio tc en el clúster nacos: SH tx-service-group: seata-demo # Grupo de transacciones, en función del cual se obtiene el nombre del clúster del servicio TC service : vgroup-mapping: # Relación de mapeo entre el grupo de transacciones y el cluster del servicio TC seata-demo: SH
3. Alta disponibilidad y recuperación remota ante desastres de los servicios de CT
1. Simular un clúster de TC para recuperación remota de desastres
Planea iniciar dos nodos de servicio seata tc:
Nombre del nodo | dirección IP | El número de puerto | Nombre del clúster |
---|---|---|---|
colocar | 127.0.0.1 | 8091 | SH |
asiento2 | 127.0.0.1 | 8092 | HZ |
Hemos iniciado un servicio seata antes, el puerto es 8091 y el nombre del clúster es SH.
Ahora, haga una copia del directorio seata y asígnele el nombre seata2.
Modifique el contenido de seata2/conf/registry.conf de la siguiente manera:
registro { # La clase del centro de registro del servicio tc, aquí seleccione nacos, también puede ser eureka, zookeeper, etc. type = "nacos" nacos { # El nombre del servicio seata tc registrado en nacos, puede personalizar aplicación = "seata-tc- server" serverAddr = "127.0.0.1:8848" group = "DEFAULT_GROUP" namespace = "" cluster = "HZ" nombre de usuario = "nacos" contraseña = "nacos" } } config { # Cómo lea el archivo de configuración del servidor tc, aquí se lee desde el centro de configuración de nacos, de modo que si tc es un cluster, la configuración se puede compartir type = "nacos" # Configure la dirección de nacos y otra información nacos { serverAddr = " 127.0.0.1:8848" espacio de nombres = "" grupo = "SEATA_GROUP" nombre de usuario = "nacos" contraseña = "nacos" dataId = "seataServer.properties" } }
Ingrese al directorio seata2/bin y ejecute el comando:
servidor-seata.bat -p 8092
Abra la consola de nacos y vea la lista de servicios:
Haga clic para ver detalles:
2. Configurar la asignación de grupos de transacciones a nacos
A continuación, necesitamos configurar la relación de mapeo entre tx-service-group y el clúster en el centro de configuración de nacos.
Crea una nueva configuración:
El contenido de la configuración es el siguiente:
# 事务组映射关系 service.vgroupMapping.seata-demo=SH service.enableDegrade =false service.disableGlobalTransaction=false # 与TC服务的通信配置 transport.type=TCP transport.server=NIO transport.heartbeat=true transport.enableClientBatchSendRequest =false 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=predeterminado transport.shutdown.wait=3 # RM配置 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=false client.rm.tableMetaCheckerInterval=60000 client.rm.sqlParserType=druida client.rm.reportSuccessEnable=false client.rm.sagaBranchRegisterEnable=false # TM配置 client.tm.commitRetryCount=5 client.tm.rollbackRetryCount=5 client.tm.defaultGlobalTransactionTimeout=60000 client.tm.degradeCheck=false client.tm.degradeCheckAllowTimes=10 client.tm.degradeCheckPeriod=2000 # undo日志配置 client.undo.dataValidation=true client.undo.logSerialization=jackson client.undo.onlyCareUpdateColumns=true client.undo.logTable=undo_log client.undo .compress.enable=true client.undo.compress.type=zip client.undo.compress.threshold=64k client.log.exceptionRate=100
3. El microservicio lee la configuración de nacos
A continuación, debe modificar el archivo application.yml de cada microservicio para permitir que el microservicio lea el archivo client.properties en nacos:
seata: configuración: tipo: nacos nacos: dirección-servidor: 127.0.0.1:8848 nombre de usuario: contraseña de nacos: grupo de nacos: SEATA_GROUP ID de datos: client.properties
Reinicie el microservicio. Ahora, las propiedades del cliente de nacos determinan si el microservicio está conectado al clúster SH de tc o al clúster HZ de tc.