Le scénario d'utilisation des transactions distribuées Steata est un système de gestion back-end où le montant de la concurrence n'est pas très important.
Steate présente et utilise le site officiel: http://seata.io/zh-cn/docs/overview/what-is-seata.html
La solution de transaction distribuée que nous utilisons ici est le mode AT, qui est le mode 2pc que
nous utilisons Il s'agit de la version 0.7.1. Différentes versions peuvent utiliser différentes méthodes.
-
seata veut contrôler les transactions distribuées
-
1) Chaque base de données de microservice doit créer une table uodo_log
- notez que 0.7.1+ ajoute le contexte de champ
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,
PRIMARY KEY (id
),
UNIQUE KEYux_undo_log
(xid
,branch_id
)
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
-
2), installez le coordinateur de transaction seata-server https://github.com/seata.seata/releases
registry.conf modification de la configuration du registre type de registre = nacos, l'adresse est remplacée par l'adresse de connexion de nacos.
Puis démarrez le service -
3) Intégration
1. Importer la dépendance 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. Tous les microservices qui souhaitent utiliser des transactions distribuées utilisent 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. Importez
registry.conf pour chaque service.
La configuration service.vgroup_mapping de file.conf file.conf doit être
définie de manière cohérente avec spring.application.name: vgroup_mapping.gulimall-order-fescar-service-group = "default", ou Modifiez le suffixe en configurant spring.cloud.alibaba.seata.tx-service-group, mais il doit être cohérent avec la configuration dans file.conf
- 5. Grande transaction: @GlobalTransactional
- 6. Petites transactions à distance: @Transactional
est utilisé à l'entrée de @Transactional , tandis que les autres appels à distance pour ouvrir des transactions sont des transactions locales @Transactional.