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

本文详细描述了如何在ApacheSeataV2.0环境下进行分布式事务的部署,包括Nacos配置、服务端设置、客户端接入及SpringBoot应用集成,旨在帮助新手用户解决官方文档混乱的问题。
摘要由CSDN通过智能技术生成

分布式事务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的课程,特此感谢黑马


  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对于分布式事务部署,你可以使用 Seata 来实现。Seata 是一个开源的分布式事务解决方案,可以帮助开发人员在分布式系统中实现数据一致性。下面是部署 Seata 的一般步骤: *** Seata。 2. 配置 Seata:在下载的 Seata 压缩包中,找到 `conf` 目录,里面包含了 Seata 的配置文件。根据你的需求,修改 `registry.conf`、`file.conf` 和 `register.conf` 等配置文件,以适应你的分布式系统环境。 3. 部署 Seata 服务器:将修改后的 Seata 配置文件拷贝到服务器上,并运行 Seata 服务器。具体的命令可以参考 Seata 官方文档。 4. 集成 Seata:在你的分布式系统中,通过引入 Seata 的相关依赖和配置文件来集成 Seata。根据你使用的技术栈(比如 Spring Cloud、Dubbo 等),参考 Seata 官方文档,按照指导进行配置和集成。 5. 编写业务逻辑:在你的业务代码中,使用 Seata 提供的 API 进行事务管理。你可以使用注解、编程式或者代理方式来实现分布式事务的控制。 6. 测试和验证:完成部署和集成后,通过测试用例或者功能测试来验证分布式事务的正常工作。确保数据一致性和事务的隔离性。 需要注意的是,Seata 支持多种存储模式(比如 MySQL、Oracle 等),你可以根据自己的实际需求进行配置和选择。另外,Seata 还提供了高可用、灾备等特性,在生产环境中可以根据需要进行配置和部署。 以上是一般的部署流程,具体的步骤和配置可能会因为你的实际情况而有所不同,建议参考 Seata 的官方文档来进行详细的部署和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值