Seata的搭建和使用(存储使用的db模式,注册与配置使用的nacos)

3 篇文章 0 订阅
2 篇文章 0 订阅

一、seata官网下载地址:

  • 提示:官网下得贼慢。如果你只是想初步学习一下,可以直接下载我上传的Seata1.3版。

在这里插入图片描述

二、seata服务端的搭建步骤

1.修改配置文件,路径为:/解包目录/seata/conf/

  • 最新版本使用的配置文件和seata1.3版不一样,新版是application.yml,1.3使用的是file.conf和registry.conf。但配置的内容是一样的。

    1. file.conf文件,如果使用file模式则可以不改

    • 目录内是file.conf.example文件,建议复制一份,然后将后缀 .example去掉就行了。
    • file.conf文件中需要该的内容如下:
## transaction log store, only used in server side
store {
  ## store mode: file、db
  mode = "db"                                  // 这里将file改为db
  ## file store property
  file {
    ## store location dir
    dir = "sessionStore"
    # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
    maxBranchSessionSize = 16384
    # globe session size , if exceeded throws exceptions
    maxGlobalSessionSize = 512
    # file buffer size , if exceeded allocate new buffer
    fileWriteBufferCacheSize = 16384
    # when recover batch read size
    sessionReloadReadSize = 100
    # async, sync
    flushDiskMode = async
  }

  ## database store property
  db {
    ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp) etc.
    datasource = "druid"
    ## mysql/oracle/postgresql/h2/oceanbase etc.
    dbType = "mysql"
    driverClassName = "com.mysql.jdbc.Driver" // 填写MySQL驱动
    url = "jdbc:mysql://127.0.0.1:3306/seata" // 填写数据库地址
    user = "mysql"                            // 填写用户名
    password = "mysql"                        // 填写密码
    minConn = 5
    maxConn = 30
    globalTable = "global_table"
    branchTable = "branch_table"
    lockTable = "lock_table"
    queryLimit = 100
  }
}

2. registry.conf文件,如果使用file模式则可以不改

registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos"                        // 将模式修改为nacos                                  要改动

nacos {
 application = "seata-server"         // seata服务注册到nacos上的服务名,修改为自己想取的名字
 serverAddr = "127.0.0.1:8848"        // nacos的地址和端口                                  如果是本地可以不改
 group = "SEATA_GROUP"                // 服务的分组,如果不知道怎么办可以不改,用默认的
 namespace = ""                       // 命名空间,默认是在public中
 cluster = "default"                  // 集群,我这是单机,没用。填默认的就行
 username = "nacos"                   // 登录nacos的用户名,一般就是nacos
 password = "nacos"                   // 登录nacos的密码,一般就是nacos
}
...                                   // 省略不需要修改的部分
}

config {
# file、nacos 、apollo、zk、consul、etcd3
type = "nacos"                        // 将模式修改为nacos                                  要改动

nacos {
 serverAddr = "127.0.0.1:8848"        //nacos服务器的IP和端口                               如果是本地可以不改
 namespace = ""                       // 命名空间,默认是在public中
 group = "SEATA_GROUP"                // 配置的分组
 username = "nacos"                   // 登录的用户名
 password = "nacos"                   // 登录的密码
}
...                                   // 省略不需要修改的部分          
}

2. 创建数据库,名字取你在file.conf文件中连接的数据库名

在这里插入图片描述

  • 数据库的建表语句在 /解包目录/script/server/db/mysql.sql。将lock_table、branch_table和global_table的建表语句在对应数据库中执行一遍。

3. 修改配置文件并上传到nacos

  1. 进入/解包路径/seata/script/config-center/config.txt文件,修改以下内容:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 开启nacos,注意版本问题,我这使用的是nacos2.2.0

  3. 进入/解包路径/seata/script/config-center/nacos/
    在这里插入图片描述

  4. 运行nacos-config.sh。如果是windows端,可以通过使用git的方式运行.sh文件:

    1. 在当前文件夹下右键使用git打开(没有git,请先安装:https://git-scm.com/download/win)
      在这里插入图片描述

    2. 使用 sh nacos-config.sh运行程序
      在这里插入图片描述

  5. 上传后的结果为:
    在这里插入图片描述

4. 进入/解包路径/bin/,点击seata-server.bat启动

在这里插入图片描述

三、seata客户端的搭建步骤

1.引入依赖

<dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
         <version>2.2.5.RELEASE</version>
</dependency>
<!-- 该依赖是否加入,取决于你使用哪种配置方式。如果是将seata的配置通过nacos获取,则需要该依赖。如果是通过加入file.conf 和 registry.conf文件的方式则不需要 -->
<dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      <version>2.2.8.RELEASE</version>
</dependency>

2.在数据库中添加undo_log表

建表语句为:

CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`context` varchar(128) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

3. 加入配置文件或者修改application.properties文件,任选其一即可

  • 第一种方式:加入配置文件。注意:服务器端使用application.yml进行配置时,无法使用该方式
    1.进入/解包目录/seata/script/client/conf/,将file.conf和registry.conf复制到项目的resource目录下。
    在这里插入图片描述
    2.修改file.conf文件,这里的default_tx_group和default必须与之前在服务器端设置的一样才行。
    在这里插入图片描述
    之前服务器端的配置为:
    在这里插入图片描述
    3. 修改registry.conf文件,修改内容与服务器端相同。
    在这里插入图片描述
    4.在项目resource目录下的application.properties中加上spring.cloud.alibaba.seata.tx-service-group= default_tx_group。
    注意:default_tx_group应该与服务器端的file.conf文件中的service.vgroupMapping后面的内容相同。
    在这里插入图片描述

  • 第二种方式:修改项目启动文件application.properties

# 这里的组名lican_tx_group可以随便填,但default得与服务器端的file.conf中的内容相同
seata.service.vgroup-mapping.lican_tx_group = default
# 这里的default_tx_group也得与file.conf中的内容相同
spring.cloud.alibaba.seata.tx-service-group= default_tx_group
seata.config.type=nacos
seata.config.nacos.server-addr= localhost:8848
seata.config.nacos.username=nacos
seata.config.nacos.password=nacos

seata.registry.type=nacos
seata.registry.nacos.server-addr=localhost:8848
seata.registry.nacos.username=nacos
seata.registry.nacos.password=nacos

服务器端的file.conf文件配置:
在这里插入图片描述

4. 在你需要远程调用回滚的方法上加上@GlobalTransactional注解

5. 案例

下面方法被调用后新建一个订单,然后远程调用方法更新库存数量(即库存数量减1),最后在int a = 1/0处报错。因主方法上加入了@GlobalTransactional注解,所以应该进行全局回滚。

进行远程调用的方法:

在这里插入图片描述

主事务运行结果:在这里插入图片描述

分支事务执行结果:在这里插入图片描述

结果:

该方法使用1/0的方式主动报错进行回滚测试,而且调用的分支事务stock/subject方法执行了,但数据库中的数据并未发生改变。所以回滚成功!

四.总结

此次记录了下seata1.3版的搭建和使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值