分布式事务seata-v2.0集群部署:

由于apache官方文档对于seata的使用说明,尤其是对于新手,使用非常不友好,文档的步骤是错乱的,要整体有个了解之后,才能较快的进行部署,所以在此记录下部署的过程和注意事项


主要步骤:

一、部署nacos:

  1. 从nacos官网下载2.3.0版本的软件包
  2. 启动nacos

二、部署seata服务端

  1. 下载seata 2.0.0链接: link
  2. 创建seata服务端数据库,数据库脚本:seata/script/server/db,我用的mysql
  3. 修改配置文件 seata/conf/application.yml。注释说明要看
seata:
  config:
    # support: nacos, consul, apollo, zk, etcd3
    type: nacos
    nacos:
      server-addr: localhost:8848  #nacos的地址
      namespace:
      group: DEFAULT_GROUP  
      username:
      password:
      data-id: seataServer.properties   #配置文件,后续要在nacos中添加nacos-server的配置信息,如数据连接,这个就是nacos配置的文件名称
  registry:
    # support: nacos, eureka, redis, zk, consul, etcd3, sofa
    type: nacos
    nacos:
      application: seata-server    #注册到nacos的服务名称,后续客户端配置服务端的时候,就要是这个名称
      server-addr: localhost:8848
      group: SEATA_GROUP   #seata客户端配置的分组要和这个名称一致
      namespace:
      # tc集群名称  
      cluster: default  #集群名称,下面注释的两行为客户端的配置,放到这里是为了方便对比。第一行为事务组的名称,第二行为客户端集群名称,要和这个一致。注意group001,第一行value和第二行的key是一致的
             #seata.tx-service-group=group001
             #seata.service.vgroup-mapping.group001=default
      username:
      password:

  1. nacos上创建配置 ,data-id,group对应配置文件上的配置

data-id就是上面nacos里的data-id
7. 添加配置内容,来自官网,docker-compose部署部分。实际上这是通用的配置,但是官方放到了docker里面,所以很乱。只需修改数据库配置即可

store.mode=db
#-----db-----
store.db.datasource=druid
store.db.dbType=mysql
# 需要根据mysql的版本调整driverClassName
# mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver
# mysql8以下版本的driver:com.mysql.jdbc.Driver
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://10.82.16.197:3306/seata-server?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
store.db.user= root
store.db.password=root
# 数据库初始连接数
store.db.minConn=1
# 数据库最大连接数
store.db.maxConn=20
# 获取连接时最大等待时间 默认5000,单位毫秒
store.db.maxWait=5000
# 全局事务表名 默认global_table
store.db.globalTable=global_table
# 分支事务表名 默认branch_table
store.db.branchTable=branch_table
# 全局锁表名 默认lock_table
store.db.lockTable=lock_table
# 查询全局事务一次的最大条数 默认100
store.db.queryLimit=100


# undo保留天数 默认7,log_status=1(附录3)和未正常清理的undo
server.undo.logSaveDays=7
# undo清理线程间隔时间 默认86400000,单位毫秒
server.undo.logDeletePeriod=86400000
# 二阶段提交重试超时时长 单位ms,s,m,h,d,对应毫秒,,,小时,,默认毫秒。默认值-1表示无限重试
# 公式: timeout>=now-globalTransactionBeginTime,true表示超时则不再重试
# 注: 达到超时时间后将不会做任何重试,有数据不一致风险,除非业务自行可校准数据,否者慎用
server.maxCommitRetryTimeout=-1
# 二阶段回滚重试超时时长
server.maxRollbackRetryTimeout=-1
# 二阶段提交未完成状态全局事务重试提交线程间隔时间 默认1000,单位毫秒
server.recovery.committingRetryPeriod=1000
# 二阶段异步提交状态重试提交线程间隔时间 默认1000,单位毫秒
server.recovery.asynCommittingRetryPeriod=1000
# 二阶段回滚状态重试回滚线程间隔时间  默认1000,单位毫秒
server.recovery.rollbackingRetryPeriod=1000
# 超时状态检测重试线程间隔时间 默认1000,单位毫秒,检测出超时将全局事务置入回滚会话管理器
server.recovery.timeoutRetryPeriod=1000
  1. 启动seata服务端。执行seata-server.sh的时候,要加上–host参数,为机器的ip地址,也就是注册到nacos上的服务的ip。否则ip地址神都不知道是什么,和客户端的网络不通
  2. 到此,nacos上可以看到seata服务,是seata服务端的服务。如果高可用,多太服务器copy下,启动多个服务即可在这里插入图片描述

三、部署客户端,springboot应用

  1. 创建springboot,导入依赖
		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <version>2022.0.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2022.0.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2022.0.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
       
  1. 在微服务所在的库创建表,undo_log,建表语句见官网。全局事务涉及的所有的库,都需要undo_log
  2. application.properties添加配置
spring.application.name=demoApp

seata.registry.type=nacos
seata.registry.nacos.server-addr=10.82.26.161:8848
seata.registry.nacos.group=SEATA_GROUP

seata.tx-service-group=group001
seata.service.vgroup-mapping.group001=default  #这个就是服务端配置的集群名称

spring.cloud.nacos.server-addr=10.82.26.161:8848
#后面两个不涉及seata
spring.config.import=nacos:application.yml?refresh=true 
spring.cloud.compatibility-verifier.enabled=false

  1. 启动服务,会在seata服务端控制台看到日志,显示RM注册 了在这里插入图片描述

  2. 启动2个微服务,配置feign调用,在第一服务的方法上(这个服务调用了第二个服务),添加 @GlobalTransactional,即可启用全局事务控制AT模式
    在这里插入图片描述

参考了黑马程序员seata-1.4的课程,特此感谢黑马


Logo

更多推荐