SpringCloud接入Seata分布式事务

918 阅读3分钟

前言

不得不说,seata的分布式事务还是坑挺多的,而且网上好多的解决方案都停留在旧版本,而你用的新版本导致好多问题需要踩,本人用了一天接入成功,成功整理出了一一篇最新的阿里推荐的版本 1.4.0 seata分布式事务接入,后面会提供网盘地址,大家直接从我那里下载需要的资料,避免因为版本,资料不统一,导致接入失败等等一系列的问题

一、项目版本

因为本人这个项目也接入了 lcn,所以都是支持lcn,seata分布式事务的,大家如果想了解lcn的看之前我写的文章

        <java.version>1.8</java.version>
        <spring.boot.version>2.2.9.RELEASE</spring.boot.version>
        <spring.cloud.version>Hoxton.SR1</spring.cloud.version>
        <spring.cloud.alibaba.version>2.2.0.RELEASE</spring.cloud.alibaba.version>
        <mysql-connector-java.version>8.0.19</mysql-connector-java.version>
        <pagehelper-spring-boot.version>1.2.13</pagehelper-spring-boot.version>
        <lombok.version>1.18.12</lombok.version>
        <lcn.version>5.0.2.RELEASE</lcn.version>
        <dubbo.version>2.7.6</dubbo.version>
        <seata.version>1.4.0</seata.version>

二、环境搭建:windows

1.数据库的准备

阿里要求必须有个seata的库,上面三张表就是阿里要求的库中的表数据,分别是 分支事务,全局事务,全局锁。因为阿里的seata并不是传统意义上的二阶段,具体原理不在这里说了

2.准备seata server和 Config文件(重要)

我这里因为接入的是nacos,所以需要好多步骤,其他接入方式不在这里介绍了

首先你要有如下从官网下的脚本,用来将你的相关数据同步到 nacos 配置中心然后,下载 seata-serverregistry-conf文件

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"

  nacos {
    application = "serverAddr"
    serverAddr = "127.0.0.1:8848"
    group = "SEATA_GROUP"
    namespace = ""
    cluster = "default"
    username = "nacos"
    password = "nacos"
  }
  eureka {
    serviceUrl = "http://localhost:8761/eureka"
    application = "default"
    weight = "1"
  }
  redis {
    serverAddr = "localhost:6379"
    db = "0"
  }
  zk {
    cluster = "default"
    serverAddr = "127.0.0.1:2181"
    session.timeout = 6000
    connect.timeout = 2000
  }
  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 = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
  }
  consul {
    serverAddr = "127.0.0.1:8500"
  }
  apollo {
    app.id = "seata-server"
    apollo.meta = "http://192.168.1.204:8801"
    namespace = "application"
  }
  zk {
    serverAddr = "127.0.0.1:2181"
    session.timeout = 6000
    connect.timeout = 2000
  }
  etcd3 {
    serverAddr = "http://localhost:2379"
  }
  file {
    name = "file.conf"
  }
}

上面是注册到nacos的配置,所以我就不要 那个file.conf文件了。下面就是关键的几步了,因为我觉得上面使用起来都是没问题,没有坑的。 启动 seata-server之前,同步config文件到nacos中修改上面的config.txt修改后保存,然后windows 需要 在gitbase 界面启动,在当前路径页面,右击鼠标选择 gitbase命令

执行如下 sh nacos-config.sh 127.0.0.1 然后知道出现查看nacos是否同步到配置中心

启动seata-server,并查看nacos服务列表是否注册成功

三、项目源代码

项目结构

启动服务出现以下内容代表成功注册到seata协调者中启动展示演示出错的情况数据插入情况我就懒得演示了,相信大家看到这里已经很明白了

获取分布式获取代码及资料,都已经放在了github上,自己下载即可

github.com/huyufan1995…

欢迎关注我的微信公众号 【猿之村】! 来聊聊Java面试 加我的微信进一步交流和学习,微信手动搜索 【codeyuanzhicunup】添加即可 如有相关技术问题欢迎留言探讨,公众号主要用于技术分享,包括常见面试题剖析、以及源码解读、微服务框架、技术热点等。