1.github上下載seata-1.3.0.zip包
鏈接:https://github.com/seata/seata/releases/download/v1.3.0/seata-server-1.3.0.zip
2.打開seata壓縮包,找到conf文件夾下的registry.conf修改注冊方式和配置方式為nacos,如下:
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos"
nacos {
application = "tianxia-seata-server"
serverAddr = "127.0.0.1:8848"
group = "SEATA_GROUP"
namespace = ""
cluster = "default"
username = "nacos"
password = "nacos"
}
}
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "nacos"
nacos {
serverAddr = "127.0.0.1:8848"
namespace = ""
group = "SEATA_GROUP"
username = "nacos"
password = "nacos"
}
}
3.GitHub下載seata源碼,鏈接:https://github.com/seata/seata/tree/v1.3.0
解壓后找到script文件夾下的config-center,修改該文件夾下的config.txt文件。
config.txt文件內容都是鍵值對,后面要通過腳本把該文件中的配置導入到nacos中。修改的鍵值對項如下:
#用來配置分布式事務集群名稱
service.vgroupMapping.tianxia_article_tx_group=default
service.vgroupMapping.tianxia_member_tx_group=default
#存儲方式改成數據庫
store.mode=db
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true
store.db.user=username
store.db.password=password
修改后執行nacos文件夾下的nacos-config.sh 腳本導入配置到nacos
導入成功后如圖所示:
image.png
返回到script文件夾,進入到client目錄下的spring文件夾內,復制application.yml文件內的配置到自己的項目內,修改如下配置:
seata:
enabled: true
application-id: ${spring.application.name}
tx-service-group: ${spring.application.name}_tx_group
service:
# vgroup-mapping:
# my_test_tx_group: default
config:
type: nacos
nacos:
namespace:
serverAddr: 127.0.0.1:8848
group: SEATA_GROUP
username: "nacos"
password: "nacos"
registry:
type: nacos
nacos:
application: tianxia-seata-server
server-addr: 127.0.0.1:8848
group : "SEATA_GROUP"
namespace:
username: "nacos"
password: "nacos"
到此可以啟動seata服務端了。
啟動成功可以再nacos看到注冊的seata服務,如下:
image.png
4.上一步項目中已經加入了seata的application.yml配置,還沒有加入seata依賴:
<!--分布式事務-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>${seata.version}</version>
</dependency>
5.編寫業務代碼
在方法的入口處加上注解@GlobalTransactional
@GlobalTransactional
@Override
public boolean saveArticle() {
GcArticle build = GcArticle.builder().content("asdadad").title("asdadsdf").viewCount(1).build();
boolean save1 = this.save(build);
String save = iRemoteUserService.save();
if(true){
throw new BusinessException("asda");
}
return true;
}
被調用的遠程方法加上spring事務注解 @Transactional
事務id可以通過RootContext.getXID();獲取到
@Transactional
@Override
public boolean saveMember() {
String xid = RootContext.getXID();
log.info("xid:{}",xid);
GcMember member = GcMember.builder().age(22).nickname("hhy").phone("15857193035").build();
boolean save = this.save(member);
return save;
}
6.到此可以啟動項目進行測試了
祝大家一遍過~~