El escenario de uso de las transacciones distribuidas de Steata es un sistema de gestión de back-end donde la cantidad de simultaneidad no es muy grande.
Steate presenta y utiliza el sitio web oficial: http://seata.io/zh-cn/docs/overview/what-is-seata.html
La solución de transacciones distribuidas que usamos aquí es el modo AT, que es el modo de 2 piezas
que usamos Es la versión 0.7.1. Diferentes versiones pueden usar diferentes formas.
-
seata quiere controlar las transacciones distribuidas
-
1) Cada base de datos de microservicio debe crear una tabla uodo_log
; tenga en cuenta que 0.7.1+ agrega el contexto de campo
CREATE TABLEundo_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,
CLAVE PRINCIPAL (id
),
CLAVE ÚNICAux_undo_log
(xid
,branch_id
)
) MOTOR = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
-
2), instale el coordinador de transacciones seata-server https://github.com/seata.seata/releases
registry.conf modificación de la configuración del registro tipo de registro = nacos, la dirección se cambia a la dirección de conexión de nacos.
Entonces inicia el servicio -
3) Integración
1. Importar dependencia spring-cloud-starter-alibaba-seata | seata-all-0.7.1
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
- 3. Todos los microservicios que desean utilizar transacciones distribuidas utilizan seata DataSourceProxy
@Configuration
public class MySeataConfig {
@Autowired
DataSourceProperties dataSourceProperties;
@Bean
public DataSource dataSource(DataSourceProperties dataSourceProperties) {
HikariDataSource dataSource = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
if (StringUtils.hasText(dataSourceProperties.getName())) {
dataSource.setPoolName(dataSourceProperties.getName());
}
return new DataSourceProxy(dataSource);
}
}
- 4. Importe el
registro.conf para cada servicio.
La configuración service.vgroup_mapping de file.conf file.conf debe
establecerse de acuerdo con spring.application.name: vgroup_mapping.gulimall-order-fescar-service-group = "default", o Modifique el sufijo configurando spring.cloud.alibaba.seata.tx-service-group, pero debe ser consistente con la configuración en file.conf
- 5. Gran transacción: @GlobalTransactional
- 6. Pequeñas transacciones remotas: @Transactional
se usa en la entrada de @Transactional , mientras que otras llamadas remotas para abrir transacciones son transacciones locales @Transactional.