Utilisation des transactions distribuées Steata

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 TABLE undo_log(
    idbigint (20) NOT NULL AUTO_INCREMENT,
    branch_idbigint (20) NOT NULL,
    xidvarchar (100) NOT NULL,
    contextvarchar (128) NOT NULL,
    rollback_infolongblob NOT NULL,
    log_statusint (11) NOT NULL,
    log_createddatetime NOT NULL,
    log_modifieddatetime NOT NULL,
    PRIMARY KEY ( id),
    UNIQUE KEY ux_undo_log( xid, branch_id)
    ) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;
    Insérez la description de l'image ici

  • 2), installez le coordinateur de transaction seata-server https://github.com/seata.seata/releases
    Insérez la description de l'image ici
    registry.conf modification de la configuration du registre type de registre = nacos, l'adresse est remplacée par l'adresse de connexion de nacos.
    Insérez la description de l'image ici
    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.
    Insérez la description de l'image ici
    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
    Insérez la description de l'image ici
  • 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.
    Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/u014496893/article/details/114238773
conseillé
Classement