Seata简介
1:启动Seata
1.1 下载Seata
前往GitHub 下载 Seata
1.2 配置Seata
Seata
中的配置文件在 seata/conf
目录中,启动要修改的配置文件有两个,分别是:file.conf
和 registry.conf
。
按照我的理解,file.conf
是配置事务回滚需要文件数据的,registry.conf
是配置注册中心的。
按照自己需要来进行修改,我这里使用了 Mysql
及 Nacos
来进行配置。
1.3 启用Seata
### 这里指定host 的时候,如果是不同机器访问,则指定对外host
sh seata-server.sh -p 8091 -h 127.0.0.1 -m file
启动成功:
在Nacos
中也成功注册了。
2:编写项目
这次的项目编写,因为是测试,所以很简单的一个分布式调用。
分别为:调用方,库存方,订单方。
调用方调用减库存,调用订单方生成订单。
2.1:调用方
使用OpenFeign
来进行调用服务。
则需要引入包内容为:
// 进行调用
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
// 注册中心
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
// seata
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
配置文件内容为:
server:
port: 1001
spring:
application:
name: seata-web
cloud:
nacos:
discovery:
# 注册中心地址
server-addr: 192.168.31.37:8848
username: nacos
password: nacos
feign:
hystrix:
enabled: false
client:
config:
default:
#建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间
ConnectTimeOut: 5000
#指建立连接后从服务端读取到可用资源所用的时间
ReadTimeOut: 5000
seata:
enabled: true
enable-auto-data-source-proxy: true
tx-service-group: test-default
registry:
type: nacos
nacos:
password: xiaofsu
username: nacos
# 注册中心地址
server-addr: 192.168.31.37:8848
application: seata-server
service:
vgroup-mapping:
test-default: default
disable-global-transaction: false
grouplist:
# seata启动对外地址
default: 192.168.31.37:8091
client:
rm:
report-success-enable: false
具体代码不放置了,具体就是使用OpenFeign
来进行调用订单方和库存方。
在服务发起调用的时候,需要添加Seata
的事务注解@GlobalTransactional(rollbackFor = Exception.class)
来让Seata
处理。
2.2:订单和库存方
同样也需要导入Seata
包。
配置文件
server:
port: 2001
spring:
application:
name: seata-order
cloud:
nacos:
discovery:
server-addr: 192.168.31.37:8848
username: nacos
password: nacos
alibaba:
seata:
tx-service-group: test-default
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.31.37:49177/seata_1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
seata:
service:
vgroup-mapping:
test-default: default
grouplist:
default: 192.168.31.37:8091
disable-global-transaction: false
3:测试
先正常情况下测试,可以进行减库存和生成订单操作。
当某一个服务抛出异常之后,则事务回滚。
A-B A-C (A-C 调用异常,事务回滚)
具体代码:Gitee
A-B A-C B-D (B-D 调用异常,事务回滚)
具体代码:Gitee