一文了解Seata的安装和配置

WilliamGates
发布于 2023-9-26 11:23
浏览
0收藏

我们都知道现在使用微服务,那么就会出现一种情况,就是一个功能,从 A 服务,到 B 服务,然后到 C 服务,每个服务都可能需要去调取不同的服务,而这个服务之间的调用,而当他们使用三个独立的数据源的时候,那么他们也就只能保证自己每个服务内部的事务,而去全局的一致性,则是没有办法保证的,也就是我们再面试的时候,经常会被问到的分布式事务。

分布式事务

其实分布式事务用一句话概括,那就是一次业务操作,如果横跨多个数据源或者需要跨多个系统进行远程调用的话,就会产生分布式事务问题。

如何解决分布式事务

分布式事务其实现在解决方案有很多,比如 TCC方案,XA 方案,本地消息表,可靠消息最终一致性方案,最大努力通知方案等等,但是这种方案实现上肯定都是偏复杂的,而阿里我们都知道他是有一套自己解决分布式事务的方案的,那么大家都知道是什么呢?今天了不起就来和大家看看这个 Seata 一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。

Seata简介

Senta 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。

我们来看看官网的介绍,

Seata官网

一文了解Seata的安装和配置-鸿蒙开发者社区


突然看到这个图里面的术语的时候,是不是有点懵,我们来看看这个Seata的术语

TC (Transaction Coordinator) - 事务协调者

维护全局和分支事务的状态,驱动全局事务提交或回滚。

TM (Transaction Manager) - 事务管理器

定义全局事务的范围:开始全局事务、提交或回滚全局事务。

RM (Resource Manager) - 资源管理器

管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

其实如果看上面的图,我们看看这个处理过程

一文了解Seata的安装和配置-鸿蒙开发者社区

接下来我们直接来实战试一下这个Seata的实际操作。

Seata-Server安装

我们直接用官网的Demo来学习一下

快速开始

我们挑选一个不是那么新的版本,毕竟都知道,新版本中那可是有很多坑的,一个不留神就踩进去,学习还是稳一手。

一文了解Seata的安装和配置-鸿蒙开发者社区

下载完成,直接解压,然后去找到文件目录,

我们直接找到config下的 file.config,

修改file.conf

主要就是修改,事务日志存储模式为db+数据库连接信息

我们直接把mode改为db

然后db改为我们自己的数据库地址

一文了解Seata的安装和配置-鸿蒙开发者社区

然后我们去把数据库给创建好,建表语句在config下的 readme文件中。

一文了解Seata的安装和配置-鸿蒙开发者社区

我们找到 server 的 Mysql 的建表语句

一文了解Seata的安装和配置-鸿蒙开发者社区

ok了 建表成功。

修改registry.conf

还是同样的目录,我们再修改一下 registry.conf 主要是来修改nacos的信息的,因为 Seata 其实推荐的也是 nacos,所以下面的这个 type 我们直接来改成自己的 naocs 就可以了。

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

  nacos {
    application = "seata-server"
    serverAddr = "127.0.0.1:8848"
    group = "SEATA_GROUP"
    namespace = "5518397c-7ea8-4f55-89ca-dacfc6fdf914"
    cluster = "default"
    username = "nacos"
    password = "nacos"
  }

config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"

  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = "5518397c-7ea8-4f55-89ca-dacfc6fdf914"
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
    dataId = "seataServer.properties"
  }
  ...
}

获取 config.txt 文件

直接获取config.txt

config.txt

然后我们修改一下store

一文了解Seata的安装和配置-鸿蒙开发者社区

配nacos

先从git上面下载 nacos-config.sh,然后推送配置到nacos

nacos-config.sh

把 nacos-config.sh 文件放到 config 下,然后执行命令

​sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5518397c-7ea8-4f55-89ca-dacfc6fdf914 -u nacos -w nacos​

命令的解释如下:

-h: 注册到注册中心的ip
-p: Server rpc 监听端口
-m: 全局事务会话信息存储模式,file、db、redis,优先读取启动参数 (Seata-Server 1.3及以上版本支持redis)
-n: Server node,多个Server时,需区分各自节点,用于生成不同区间的transactionId,以免冲突
-e: 多环境配置参考 http://seata.io/en-us/docs/ops/multi-configuration-isolation.html

一文了解Seata的安装和配置-鸿蒙开发者社区

执行这个有个前提,那就是registry.conf中的namespace和命令中的必须保持一样,并且在 nacos中也增加了对应的命名空间,如果你没有仔细的看文档,并且没有对 nacos 中的命名空间做增加的话,那么你就肯定失败,然后在 nacos 中就是看不到自己的配置情况。

一文了解Seata的安装和配置-鸿蒙开发者社区

创建完成之后,就会出现这个命名空间的ID,我们直接来随机的,然后复制这个ID 到registry.conf中配置一下就可以了。

大家可以看到上面的图中出现了total-count是98,但是failure-count:1 我们看执行完命令后,失败的是哪个,

nacos-config.sh: line 88: [: too many arguments
Set store.publicKey= failure

这个失败了,但是有人可能会失败四个

Set store.publicKey= failure
Set store.redis.sentinel.masterName= failure
Set store.redis.sentinel.sentinelHosts= failure
Set store.redis.password= failure

其实这四个并不影响这个执行,因为我们可以去 Nacos 中看配置情况,

一文了解Seata的安装和配置-鸿蒙开发者社区

因为了不起之季节吧这个 store.redis 的内容给全注释了。所以只有一个没成功。

接下来我们就可以启动seata了。

启动 seata

我们这里先不考虑这个client,因为可以在我们后面使用的时候再去添加这个

直接执行 bin/seata-server.bat 文件,然后看看能启动成功不。

一文了解Seata的安装和配置-鸿蒙开发者社区

当我们看到这个 Server started 的时候,我们就知道,我们的 seata 的服务端就启动成功了,到这里我们的 seata 的安装和配置就算是已经完成了。

你学会了么?


文章转载自公众号:Java极客技术

标签
已于2023-9-26 11:23:27修改
收藏
回复
举报
回复
    相关推荐