【Seata】Despliegue e integración de seata

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.

Supongo que te gusta

Origin blog.csdn.net/weixin_45481821/article/details/133213078
Recomendado
Clasificación