服务器端
从github上把seata下载下来,然后修改conf下的registry文件,这里我们使用Nacos注册和配置方式,所以只需要修改nacos这一块的内容,其它的放着不动就行了。
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos"
nacos {
application = "seata-server"
serverAddr = "81.68.XXX.XXX:8848"
group = "SEATA_GROUP"
namespace = ""
cluster = "default"
username = ""
password = ""
}
eureka {
serviceUrl = "http://localhost:8761/eureka"
application = "default"
weight = "1"
}
redis {
serverAddr = "localhost:6379"
db = 0
password = ""
cluster = "default"
timeout = 0
}
zk {
cluster = "default"
serverAddr = "127.0.0.1:2181"
sessionTimeout = 6000
connectTimeout = 2000
username = ""
password = ""
}
consul {
cluster = "default"
serverAddr = "127.0.0.1:8500"
}
etcd3 {
cluster = "default"
serverAddr = "http://localhost:2379"
}
sofa {
serverAddr = "127.0.0.1:9603"
application = "default"
region = "DEFAULT_ZONE"
datacenter = "DefaultDataCenter"
cluster = "default"
group = "SEATA_GROUP"
addressWaitTime = "3000"
}
file {
name = "file.conf"
}
}
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "nacos"
nacos {
serverAddr = "81.68.XXX.XXX:8848"
namespace = ""
group = "SEATA_GROUP"
username = ""
password = ""
}
consul {
serverAddr = "127.0.0.1:8500"
}
apollo {
appId = "seata-server"
apolloMeta = "http://192.168.1.204:8801"
namespace = "application"
}
zk {
serverAddr = "127.0.0.1:2181"
sessionTimeout = 6000
connectTimeout = 2000
username = ""
password = ""
}
etcd3 {
serverAddr = "http://localhost:2379"
}
file {
name = "file.conf"
}
}
我们来看一下里面的readme文件:
# 脚本说明
## [client](https://github.com/seata/seata/tree/develop/script/client)
> 存放用于客户端的配置和SQL
- at: AT模式下的 `undo_log` 建表语句
- conf: 客户端的配置文件
- saga: SAGA 模式下所需表的建表语句
- spring: SpringBoot 应用支持的配置文件
## [server](https://github.com/seata/seata/tree/develop/script/server)
> 存放server侧所需SQL和部署脚本
- db: server 侧的保存模式为 `db` 时所需表的建表语句
- docker-compose: server 侧通过 docker-compose 部署的脚本
- helm: server 侧通过 Helm 部署的脚本
- kubernetes: server 侧通过 Kubernetes 部署的脚本
## [config-center](https://github.com/seata/seata/tree/develop/script/config-center)
> 用于存放各种配置中心的初始化脚本,执行时都会读取 `config.txt`配置文件,并写入配置中心
- nacos: 用于向 Nacos 中添加配置
- zk: 用于向 Zookeeper 中添加配置,脚本依赖 Zookeeper 的相关脚本,需要手动下载;ZooKeeper相关的配置可以写在 `zk-params.txt` 中,也可以在执行的时候输入
- apollo: 向 Apollo 中添加配置,Apollo 的地址端口等可以写在 `apollo-params.txt`,也可以在执行的时候输入
- etcd3: 用于向 Etcd3 中添加配置
- consul: 用于向 consul 中添加配置
由于我们使用的是nacos的配置方式,只需要第1条必要的SQL脚本和第3条的配置脚本。
关于第3条的如何操作,先修改config文件:
然后修改这2行,其它的看需要修改,后面的客户端配置和这个也有关系:
然后用他提供的脚本倒入你自己的Nacos配置管理中去:
然后我们启动seata-server即可,服务端实际上就这些配置。
客户端
Maven倒入以下依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-seata</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
然后是YML文件中相关的配置:
spring:
cloud:
nacos:
discovery:
server-addr: 81.68.XX.XX:8848
alibaba:
seata:
tx-service-group: my_test_tx_group
seata:
service:
disable-global-transaction: false
enable-degrade: false
grouplist:
default: 81.68.XX.XX:8091
vgroup-mapping:
my_test_tx_group: default
上面的my_test_tx_group务必和服务器端config.txt(就是脚本倒入Nacos配置中心的)中保持一致
service.vgroupMapping.my_test_tx_group=default
service.default.grouplist=81.68.XXX.XXX:8091
关于读隔离:
对于不参与全局事务的读操作,需要加上@GlobalLock注解,并且在select语句中加上for update,这样才会申请全局锁,而且会打开重试器。
关于写隔离:
对于不参与全局事务的写操作,同样需要加上@GlobalLock注解,seata默认会对insert,update,delete操作申请全局锁,但是如果没有申请到,会直接抛出异常,回滚。如果想要重试,需要添加select for update才有。
参考资料:https://www.cnblogs.com/crazymakercircle/p/18007172
最后一次更新于2024-08-23


0 条评论