Steata分散トランザクションの使用シナリオは、並行性の量がそれほど大きくないバックエンド管理システムです。
Steate紹介し、公式ウェブサイトを使用しています:http://seata.io/zh-cn/docs/overview/what-is-seata.html
私たちがここで使う分散トランザクションソリューションは、2PCモードでATモード、である
私たちが使用するにはバージョン0.7.1です。バージョンが異なれば、使用方法も異なる場合があります。
-
Seataは分散トランザクションを制御したい
-
1)すべてのmicroserviceデータベースはuodo_logテーブルを作成する必要があります
- 0.7.1+がフィールドコンテキストが追加されます
TABLE、CREATEundo_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)トランザクションコーディネーターseata-server https://github.com/seata.seata/releasesregistry.conf
レジストリ構成変更レジストリtype = nacosをインストールすると、アドレスがnacosの接続アドレスに変更されます。
その後、サービスを開始します -
3)統合
1.インポートの依存関係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.分散トランザクションを使用するすべてのマイクロサービスはseataDataSourceProxyを使用します
@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.サービスごとに
registry.confをインポートします。file.conffile.conf
のservice.vgroup_mapping構成は、spring.application.nameと一致するように
設定する必要があります。vgroup_mapping.gulimall-order-fescar-service-group= "default"、またはspring.cloud.alibaba.seata.tx-service-groupを構成してサフィックスを変更しますが、file.confの構成と一致している必要があります
- 5.大きなトランザクション:@GlobalTransactional
- 6.リモートスモールトランザクション:@Transactional
は@Transactionalの入り口で使用されますが、トランザクションを開くための他のリモート呼び出しはローカルトランザクション@Transactionalです。