seataチュートリアル-seata 1.0バージョン統合チュートリアル
41091 ワード
seata 1.0チュートリアル
テクノロジーの選択とバージョン
spring-cloud-starter-alibaba-seata
spring-cloud-alibaba:1.5.1.RELEASE
springcloud:Edgware.SR4
seata-all:1.0.0
springboot:1.5.4
mybatis-spring-boot-starter.version:2.0.0
java:jdk8
1.seata serverの起動
ダウンロード:https://github.com/seata/seata/releases
解凍:tar-xzvf seata-server-1.0.0.tar.gz
構成の変更:
1.registryを構成する.conf
2.fileを構成する.conf
3.建表
グローバル・トランザクション・セッション情報は、次の3つのブロックで構成されます.グローバルトランザクションglobal_table ブランチトランザクションbranch_table グローバルロックlock_table
テーブル文は次のとおりです.https://github.com/seata/seata/tree/develop/script/server/db
4.tcを起動する
binディレクトリの下:
ここではnohup方式でバックグラウンドで起動し、パラメータはオプションです.
-h:登録センターに登録されているip
-p:Server rpcリスニングポート
-m:グローバルトランザクションセッション情報格納モード、file、db、起動パラメータの優先読み出し
-n:Servernode,複数のServernodeの場合,競合を回避するために異なる区間のtransactionIdを生成するために,それぞれのノードを区別する必要がある.
-e:マルチ環境構成リファレンスhttp://seata.io/en-us/docs/ops/multi-configuration-isolation.html
2.clientエンド導入seata依存
現在、3つの方法があり、対応するサポートの程度は異なります.
に頼る
yml構成のサポート
xid転送を実現
データ・ソースの自動エージェントのサポート
GlobalTransactionScannerエントリの自動初期化
seata-all
いいえ
いいえ
はい
いいえ
seata-spring-boot-starter
はい
いいえ
はい
はい
spring-cloud-alibaba-seata
いいえ
はい
はい
はい
ユーザーがseata-allだけを導入することをお勧めしません.自分で実現する必要があるものが多すぎます.
Spring-cloud-aliba-seata,2.1.0埋め込みseata-all 0.7.1,2.1.1埋め込みseata-all 0.9.0.除外して1.0を導入することをお勧めします.
(公式文書を参照:http://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html)
ここではspring‐cloud‐alibaba‐seata依存の導入を例に挙げ,以下ではseataに関連する依存のみを示す.
3.client側導入プロファイル
seata server側とclient側のスクリプトと構成は、ここにまとめられており、client側が統合された場合、対応するファイルを探してコピーして修正します.
https://github.com/seata/seata/tree/develop/script
1.bootstrapを修正する.yml
トランザクション・グループの追加
このパケット名はカスタマイズされていますが、seata server側、client側は一貫性を保つ必要があります.
2.fileを構成する.conf
コンフィギュレーションファイルを導入し、関連するコンフィギュレーションを変更します.多くのコンフィギュレーション項目があるため、すべてを変更する必要はありません.ここでは少数を変更するだけで、先に統合して走ることができます.他のパラメータは後で自分で調整します.
file.conf
3.registryを構成する.conf
登録センターと配置センターは、いずれも多種をサポートし、自分の技術に従って型を選んで、対応する配置を修正します.
4.データソースエージェントの構成
自動エージェントがサポートされている場合は、構成をオンにします.ここではmysqlとmybatisを使用する場合、データソースを独自にエージェントする方法を示します.
5.xid伝達の実現
依存性やテクノロジーの選択が導入され、xid伝達などの論理が実現されていない場合は、ソースコードintegrationフォルダの下にあるさまざまなrpcを参照してmoduleを実現する必要があります.
https://github.com/seata/seata/tree/develop/integration
6.scanner入口の実現
依存とテクノロジーの選択を導入した場合、GlobalTransactionScannerロジックの初期化が実現されていない場合は、以下のように実現できます.
1.SeataProperties.java
2.GlobalTransactionScannerの初期化
7.建設表
seata分散トランザクションを使用する場合は、現在のサービスでundologテーブルを作成する必要があります.
構築文の参照:https://github.com/seata/seata/tree/develop/script/client/at/db
8.使用 1.@GlobalTransactionグローバルトランザクション注記 2.@GlobalLockは、汚れた読み取りや書き込みを防止し、グローバルトランザクション管理に組み込まれたくない場合に使用します.(rpcやxid伝達などのコストは不要)
テクノロジーの選択とバージョン
spring-cloud-starter-alibaba-seata
spring-cloud-alibaba:1.5.1.RELEASE
springcloud:Edgware.SR4
seata-all:1.0.0
springboot:1.5.4
mybatis-spring-boot-starter.version:2.0.0
java:jdk8
1.seata serverの起動
ダウンロード:https://github.com/seata/seata/releases
解凍:tar-xzvf seata-server-1.0.0.tar.gz
構成の変更:
1.registryを構成する.conf
[root@jr-test conf]# cat registry.conf
//
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "eureka" //
nacos {
serverAddr = "localhost"
namespace = ""
cluster = "default"
}
eureka {
serviceUrl = "http://192.xx.xx.xx:8761/eureka" //
application = "seata-server" //tc
weight = "1"
}
//......
}
//
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "file" //
file {
name = "file.conf" //
}
//......
}
2.fileを構成する.conf
[root@jr-test conf]# cat file.conf
service {
#transaction service group mapping
vgroup_mapping.fsp_tx_group = "fsp-tx" // , ,client tc ,fsp_tx_group
#only support when registry.type=file, please don't set multiple addresses
default.grouplist = "127.0.0.1:8091"
#disable seata
disableGlobalTransaction = false
}
## transaction log store, only used in seata-server
store {
## store mode: file、db
mode = "db" //
## file store property
file {
## store location dir
dir = "sessionStore"
}
## database store property
db {
## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp) etc.
datasource = "dbcp"
## mysql/oracle/h2/oceanbase etc.
db-type = "mysql"
driver-class-name = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://192.xx.xx.xx:3306/seata" // tc , ,
user = "root"
password = "xxx"
}
}
3.建表
グローバル・トランザクション・セッション情報は、次の3つのブロックで構成されます.
テーブル文は次のとおりです.https://github.com/seata/seata/tree/develop/script/server/db
4.tcを起動する
binディレクトリの下:
nohup sh seata-server.sh -h xx.xx.xx.xx -p 8091 -m db -n 1 &
ここではnohup方式でバックグラウンドで起動し、パラメータはオプションです.
-h:登録センターに登録されているip
-p:Server rpcリスニングポート
-m:グローバルトランザクションセッション情報格納モード、file、db、起動パラメータの優先読み出し
-n:Servernode,複数のServernodeの場合,競合を回避するために異なる区間のtransactionIdを生成するために,それぞれのノードを区別する必要がある.
-e:マルチ環境構成リファレンスhttp://seata.io/en-us/docs/ops/multi-configuration-isolation.html
2.clientエンド導入seata依存
現在、3つの方法があり、対応するサポートの程度は異なります.
に頼る
yml構成のサポート
xid転送を実現
データ・ソースの自動エージェントのサポート
GlobalTransactionScannerエントリの自動初期化
seata-all
いいえ
いいえ
はい
いいえ
seata-spring-boot-starter
はい
いいえ
はい
はい
spring-cloud-alibaba-seata
いいえ
はい
はい
はい
ユーザーがseata-allだけを導入することをお勧めしません.自分で実現する必要があるものが多すぎます.
Spring-cloud-aliba-seata,2.1.0埋め込みseata-all 0.7.1,2.1.1埋め込みseata-all 0.9.0.除外して1.0を導入することをお勧めします.
(公式文書を参照:http://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html)
ここではspring‐cloud‐alibaba‐seata依存の導入を例に挙げ,以下ではseataに関連する依存のみを示す.
<properties>
<spring-cloud.version>Edgware.SR4</spring-cloud.version>
<spring-cloud-alibaba.version>1.5.1.RELEASE</spring-cloud-alibaba.version>
<seata-version>1.0.0</seata-version>
</properties>
<dependencies>
<!--seata-all-->
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
<version>${seata-version}</version>
</dependency>
<!--sca-seata-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!--Spring Cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring Cloud Alibaba, seata-all 0.9, , 1.0-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
<exclusions>
<exclusion>
<artifactId>seata-all</artifactId>
<groupId>io.seata</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
3.client側導入プロファイル
seata server側とclient側のスクリプトと構成は、ここにまとめられており、client側が統合された場合、対応するファイルを探してコピーして修正します.
https://github.com/seata/seata/tree/develop/script
1.bootstrapを修正する.yml
トランザクション・グループの追加
spring:
cloud:
alibaba:
seata:
tx-service-group: fsp_tx_group
このパケット名はカスタマイズされていますが、seata server側、client側は一貫性を保つ必要があります.
2.fileを構成する.conf
コンフィギュレーションファイルを導入し、関連するコンフィギュレーションを変更します.多くのコンフィギュレーション項目があるため、すべてを変更する必要はありません.ここでは少数を変更するだけで、先に統合して走ることができます.他のパラメータは後で自分で調整します.
file.conf
//
service {
#transaction service group mapping
vgroup_mapping.default = "default"
#only support when registry.type=file, please don't set multiple addresses
default.grouplist = "127.0.0.1:8091"
#degrade, current not support
enableDegrade = false
#disable seata
disableGlobalTransaction = false
}
client {
//
rm {
report.success.enable = true // tc,
}
support {
# auto proxy the DataSource bean //
spring.datasource.autoproxy = false
}
}
3.registryを構成する.conf
登録センターと配置センターは、いずれも多種をサポートし、自分の技術に従って型を選んで、対応する配置を修正します.
registry {
# file 、nacos 、eureka、redis、zk
type = "eureka"
eureka {
serviceUrl = "http://192.xx.xx.xx:8761/eureka"
application = "default"
weight = "1"
}
//
}
config {
# file、nacos 、apollo、zk
type = "file"
file {
name = "file.conf"
}
//
}
4.データソースエージェントの構成
自動エージェントがサポートされている場合は、構成をオンにします.ここではmysqlとmybatisを使用する場合、データソースを独自にエージェントする方法を示します.
package io.seata.sample;
import com.alibaba.druid.pool.DruidDataSource;
import io.seata.rm.datasource.DataSourceProxy;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.transaction.SpringManagedTransactionFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
/**
*
* @author IT
*/
@Configuration
public class DataSourceConfiguration {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
@Primary
@Bean("dataSource")
public DataSourceProxy dataSource(DataSource druidDataSource){
return new DataSourceProxy(druidDataSource);
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSourceProxy dataSourceProxy)throws Exception{
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSourceProxy);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath*:/mapper/*.xml"));
sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory());
return sqlSessionFactoryBean.getObject();
}
}
5.xid伝達の実現
依存性やテクノロジーの選択が導入され、xid伝達などの論理が実現されていない場合は、ソースコードintegrationフォルダの下にあるさまざまなrpcを参照してmoduleを実現する必要があります.
https://github.com/seata/seata/tree/develop/integration
6.scanner入口の実現
依存とテクノロジーの選択を導入した場合、GlobalTransactionScannerロジックの初期化が実現されていない場合は、以下のように実現できます.
1.SeataProperties.java
@ConfigurationProperties("spring.cloud.alibaba.seata")
public class SeataProperties {
private String txServiceGroup;
public SeataProperties() {
}
public String getTxServiceGroup() {
return this.txServiceGroup;
}
public void setTxServiceGroup(String txServiceGroup) {
this.txServiceGroup = txServiceGroup;
}
}
2.GlobalTransactionScannerの初期化
package com.runlion.fsp.credit.seata.config;
import com.runlion.fsp.credit.seata.SeataProperties;
import io.seata.spring.annotation.GlobalTransactionScanner;
import org.apache.commons.lang.StringUtils;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author IT
*/
@Configuration
@EnableConfigurationProperties({SeataProperties.class})
public class GlobalTransactionAutoConfiguration {
private static final String APPLICATION_NAME_PREFIX = "spring.application.name";
private static final String DEFAULT_TX_SERVICE_GROUP_SUFFIX = "-seata-service-group";
private final ApplicationContext applicationContext;
private final SeataProperties seataProperties;
public GlobalTransactionAutoConfiguration(
ApplicationContext applicationContext,
SeataProperties seataProperties) {
this.applicationContext = applicationContext;
this.seataProperties = seataProperties;
}
/**
* If there is no txServiceGroup,use the default
* @return GlobalTransactionScanner the entrance
*/
@Bean
public GlobalTransactionScanner globalTransactionScanner(){
String applicationName = this.applicationContext.getEnvironment().getProperty(APPLICATION_NAME_PREFIX);
String txServiceGroup = seataProperties.getTxServiceGroup();
if(StringUtils.isEmpty(txServiceGroup)){
txServiceGroup = applicationName + DEFAULT_TX_SERVICE_GROUP_SUFFIX;
this.seataProperties.setTxServiceGroup(txServiceGroup);
}
return new GlobalTransactionScanner(applicationName,txServiceGroup);
}
}
7.建設表
seata分散トランザクションを使用する場合は、現在のサービスでundologテーブルを作成する必要があります.
構築文の参照:https://github.com/seata/seata/tree/develop/script/client/at/db
8.使用