Aplicación práctica de transacciones distribuidas de SEATA


       En el desarrollo del proyecto, se requiere control de transacciones distribuidas y se seleccionó la solución de procesamiento de transacciones distribuidas de código abierto (SEATA) de Ali. Me he encontrado con muchos problemas en el uso de SEATA, aquí hay una lista para que todos puedan aprender y corregir.

 1. Instalación de Seata Instalación
         en el entorno Windows, descargue el paquete de instalación de Seata. Una vez descargado el paquete de instalación, ¡simplemente descomprímalo!

     Después de instalar seata en el entorno Linux, todas las configuraciones son las mismas que en el entorno Windows.

 2. Selección de versión
         Durante el uso del proyecto, elegí dos versiones de SEATA, 1.6.1 y 1.5.2, las cuales fueron implementadas y utilizadas. Existen ciertas diferencias entre las dos versiones principales.

la diferencia:

  •  Cuando se utiliza la versión 1.6.1, se verificará el campo de incremento automático de la clave principal. Cuando se utiliza mybatis o mybatis-plus, debe configurar usted mismo la clave principal de incremento automático en el código. No puede usar el incremento automático (mysql ) o secuencia de los campos en la base de datos (pgsql).

        Cuando se utiliza la versión 1.5.2, no se realizará ninguna verificación de campo de incremento automático de clave principal.

  • La versión 1.6.1 es compatible con JDK17 y SpringBoot3.0.
  • Después de la versión 1.6.1, se admiten fugas de servicios de registros múltiples.

 3. SEATA tiene como objetivo crear una solución integral para transacciones distribuidas y eventualmente proporcionará cuatro modos de transacción: AT, TCC, SAGA y XA. Si estás interesado, puedes profundizar en los principios de realización de los cuatro modos.

4. Precauciones durante el uso

  • Estoy usando el modo AT y el centro de registro usa NACOS. El archivo de configuración de Seata se configura como se muestra a continuación:
  • El archivo de configuración de nacos es el siguiente:

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=default
transport.shutdown.wait=3
# 自定义 vgroupMapping 名称
service.vgroupMapping.common-group=default
service.vgroupMapping.ccfw-supervise-sys-group=default
service.vgroupMapping.ccfw-operator-sys-group=default

# grouplist 只适用文件模式
# service.default.grouplist=127.0.0.1:8091
# service.enableDegrade=false
# service.disableGlobalTransaction=false
# client.rm.asyncCommitBufferLimit=10000
# client.rm.lock.retryInterval=10
# client.rm.lock.retryTimes=30

# Seata 提供了一个“全局锁重试”功能,默认未开启(遇到全局锁冲突时是否回滚,默认为 true)
client.rm.lock.retryPolicyBranchRollbackOnConflict=false
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=false
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
# 更改db模式
store.mode=db
# store.publicKey=
# 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.db.datasource=druid
store.db.dbType=postgresql
store.db.driverClassName=org.postgresql.Driver
store.db.url=jdbc:postgresql://173.18.160.70:5432/seata?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
store.db.user=root
store.db.password=Hetong_2022@SC020
store.db.minConn=5
store.db.maxConn=20
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
# 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
default.grouplist=173.18.160.161:8091
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
client.undo.dataValidation=true
client.undo.logSerialization=Kryo
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
log.exceptionRate=100
transport.serialization=seata
transport.compressor=none
metrics.enabled=true
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898
  • Agregar agrupación predeterminada de transacciones en nacos
  •  Introduzca la dependencia de seata en pom:
  •  Método de llamada de código

 Método de llamada de inicio de transacción

 Llamada de transacción de parte de subtransacción.

5. El control de transacciones distribuidas es un control de transacciones unidireccional, el iniciador de la transacción informa un error y la subtransacción se revierte. Si es necesario que el iniciador de la transacción revierta la transacción después de que la subtransacción informe un error, debe juzgarla y procesarla usted mismo.

Supongo que te gusta

Origin blog.csdn.net/weixin_38863607/article/details/130080382
Recomendado
Clasificación