seata的启动与使用

news2024/11/24 9:49:27

1 下载seata

下载地址:https://github.com/seata/seata/releases/v0.9.0/

1.1 修改配置文件

将下载得到的压缩包进行解压,进入conf目录,调整下面的配置文件:

  • registry.conf
registry {
 type = "nacos"
 nacos {
   serverAddr = "localhost"
   namespace = "public"
   cluster = "default"
 }
}
config {
 type = "nacos"
 nacos {
   serverAddr = "localhost"
   namespace = "public"
   cluster = "default"
 }
}
  •  nacos-config.txt

service.vgroup_mapping.service-product=default
service.vgroup_mapping.service-order=default 

这里的语法为: service.vgroup_mapping.${your-service-gruop}=default ,中间的
${your-service-gruop} 为自己定义的服务组名称, 这里需要我们在程序的配置文件中配置。

1.3 初始化seata在nacos的配置

# 初始化seata 的nacos配置
# 注意: 这里要保证nacos是已经正常运行的
cd conf
nacos-config.sh 127.0.0.1

执行成功后可以打开Nacos的控制台,在配置列表中,可以看到初始化了很多Group为SEATA_GROUP的配置。

1.4 启动seata服务

cd bin
seata-server.bat -p 9000 -m file

启动后在 Nacos 的服务列表下面可以看到一个名为 serverAddr 的服务。

2 使用Seata实现事务控制

2.1 初始化数据表

在我们的数据库中加入一张undo_log表,这是Seata记录事务日志要用到的表

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;

2.2 添加配置

在需要进行分布式控制的微服务中进行下面几项配置:
添加依赖

<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

 DataSourceProxyConfig
Seata 是通过代理数据源实现事务分支的,所以需要配置 io.seata.rm.datasource.DataSourceProxy 的
Bean,且是 @Primary默认的数据源,否则事务不会回滚,无法实现分布式事务

 

@Configuration
public class DataSourceProxyConfig {
  @Bean
  @ConfigurationProperties(prefix = "spring.datasource")
  public DruidDataSource druidDataSource() {
    return new DruidDataSource();
 }
  @Primary
  @Bean
  public DataSourceProxy dataSource(DruidDataSource druidDataSource) {
    return new DataSourceProxy(druidDataSource);
 }
}

registry.conf

在resources下添加Seata的配置文件 registry.conf

registry {
 type = "nacos"
 nacos {
   serverAddr = "localhost"
   namespace = "public"
   cluster = "default"
 }
}
config {
 type = "nacos"
 nacos {
   serverAddr = "localhost"
   namespace = "public"
   cluster = "default"
 }
}

bootstrap.yaml

spring:
application:
 name: service-product
cloud:
 nacos:
  config:
   server-addr: localhost:8848 # nacos的服务端地址
   namespace: public
   group: SEATA_GROUP
 alibaba:
  seata:
   tx-service-group: ${spring.application.name}

2.3 在order微服务开启全局事务

@GlobalTransactional//全局事务控制
public Order createOrder(Integer pid) {}

2.4 测试

再次下单测试

3 seata运行流程分析

要点说明:
1、每个RM使用DataSourceProxy连接数据库,其目的是使用ConnectionProxy,使用数据源和数据连接代理的目的就是在第一阶段将undo_log和业务数据放在一个本地事务提交,这样就保存了只要有业务操作就一定有undo_log。
2、在第一阶段undo_log中存放了数据修改前和修改后的值,为事务回滚作好准备,所以第一阶段完成就已经将分支事务提交,也就释放了锁资源。
3、TM开启全局事务开始,将XID全局事务id放在事务上下文中,通过feign调用也将XID传入下游分支事务,每个分支事务将自己的Branch ID分支事务ID与XID关联。
4、第二阶段全局事务提交,TC会通知各各分支参与者提交分支事务,在第一阶段就已经提交了分支事务,这里各各参与者只需要删除undo_log即可,并且可以异步执行,第二阶段很快可以完成。
5、第二阶段全局事务回滚,TC会通知各各分支参与者回滚分支事务,通过 XID 和 Branch ID 找到相应的回滚日志,通过回滚日志生成反向的 SQL 并执行,以完成分支事务回滚到之前的状态,如果回滚失败则会重试回滚操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1043902.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ARM IIC总线实现温湿传感器

IIC.h #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h"/* 通过程序模拟实现I2C总线的时序和协议* GPIOF ---> AHB4* I2C1_SCL ---> PF14* I2C1_SDA ---> PF15** */#define SET_SDA_OUT do{G…

VR全景如何助力乡村振兴,VR全景推动农业发展

引言&#xff1a; 乡村振兴是当前我国发展的重要战略&#xff0c;而VR全景技术作为一种创新的数字技术&#xff0c;帮助乡村增加曝光率&#xff0c;为乡村发展提供了机遇&#xff0c;助力乡村振兴。 一.促进乡村文化传承与旅游发展 1.通过VR全景技术&#xff0c;传承乡村文化…

如何评估商城源码的安全性和稳定性?

评估商城源码的安全性和稳定性是选择合适的商城源码的关键一步。以下是一些方法和指标&#xff0c;可用于评估商城源码的安全性和稳定性。希望对大家有所帮助(仅供参考)。 1、源码质量 商城源码的质量是评估其安全性和稳定性的重要指标之一。我们技术可以检查源码的编码规范、…

数据库导入文字不乱吗 CSV

phpMyadmin建立数据库&#xff06;设置外键&#xff06;导入csv文件 - 知乎

CMOS图像传感器——Stack Pixel(2)

在去年的时候, 就写过Sony大法的Stack Pixel CMOS图像传感器——Stack Pixel_stacked-pixel cis_沧海一升的博客-CSDN博客对索尼的2-Layer Transistor Pixel技术进行了介绍_stacked-pixel cishttps://blog.csdn.net/qq_21842097/article/details/127007460 IEDM 2021 上…

动手学深度学习(pytorch版)第二章2.1 Note-ndarray

1.入门 x torch.arange(12) //首先&#xff0c;我们可以使用 arange 创建一个行向量 x。这个行向量包含以0开始的前12个整数&#xff0c; //它们默认创建为整数。也可指定创建类型为浮点数。张量中的每个值都称为张量的元素&#xff08;element&#xff09; x.shape x.numel…

Educational Codeforces Round 155 (Rated for Div. 2) - D Sum of XOR Functions

学到的几个知识点&#xff1a; 1.拆位 对于整体上的异或操作可以转化为31个二进制位上的操作&#xff0c;每一位再上 。 将一次操作拆为31次来方便操作。 2. s[i]表示异或前缀和&#xff0c;l~r间的异或和为s[r] ^ s[l - 1] ----> 拆完位后这个公式还能再推出一个性…

【CentOS7】安装docker

【CentOS7】安装docker 1.Docker 要求 CentOS 系统的内核版本高于 3.10 &#xff0c;通过命令查看你当前的内核版本 。2.使用 root 权限登录 Centos&#xff0c;将 yum 包更新到最新。&#xff08;确保联网&#xff09;3. 如果安装过旧版本的话&#xff0c;卸载旧版本4. 设置yu…

初识Load Runner

Load Runner安装 为什么选择Load Runner Load Runner 有强大的录制功能&#xff0c;Jmeter没有录制功能Load Runner 可以设计丰富的测试场景Load Runner 能够产出丰富的测试报告 Load Runner三大组件之间的关系 每个组件分别是干什么的&#xff1f; virtual User Generator…

搭建Vue的开发环境,Edge浏览器安装VUE拓展工具

一、在下载vue.js文件 在vue官网中下载开发版本的vue.js文件--> 安装 — Vue.js (vuejs.org) 二、将vue.js导入到项目中 这时候我们运行项目控制台会抛出两个错误 三、安装拓展工具 这里以Edge浏览器为例&#xff0c;其他浏览器上可在拓展管理商店中下载 进入Edge的拓展…

python安全工具开发笔记(六)——Python爬虫BeautifulSoup模块的介绍

一、Python爬虫基础知识介绍 1.1 Python相关库 1、requests、re 2、BeautifulSoup 3、hackhttp 1.2 Python BeautifulSoup Python BeautifulSoup模块的使用介绍∶ 1、解析内容 from bs4 import BeautifulSoup soup BeautifulSoup(html_doc) 2、浏览数据 soup.title soup…

C语言 循环结构

while循环和for循环都是入口条件循环&#xff0c;即在循环的每次迭代之前检查测试条件&#xff0c;所以有可能根本不执行循环体中的内容。C语言还有出口条件循环&#xff08;exit-condition loop&#xff09;&#xff0c;即在循环的每次迭代之后检查测试条件&#xff0c;这保证…

Python 比较出2个list中相同的内容,忽略大小写

2个list 比较出相同的内容&#xff0c;忽略大小写 大致思路如下&#xff1a; 首先让list里面的内容都转成大写或者小写&#xff0c;之后在遍历其中一个list 来判断是否在另外一个list中 代码 a ["Apple", "Banana", "Pear", "Peach&q…

快递批量查询高手软件:一键批量分析已揽收单号

每天都需要同时货好几家快递呢&#xff0c;发货的量也是比较大&#xff0c;平时大家时什么跟踪快递呢&#xff0c;如何在大量单号找出已揽收或未揽收单号呢&#xff1f;有没有便捷方法&#xff0c;可以批量筛选出单号呢&#xff0c;想知道得跟着小编往下看。 1.首先我们在电脑…

用原生js写一个弹窗消息提醒插件(转载)

https://www.cnblogs.com/mr-zhima/p/10909950.html 喏&#xff0c;就是这么一个效果。 1. 分析 当消息被触发的时候&#xff0c;会有一个自上而下的淡入过程。在持续了一段时间后会自动的消失&#xff0c;或者是需要用户来手动的点击关闭按钮。在消息消失的时候&#xff0c;…

ChatGPT 现在可以看、听和说话了!

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

javaee之黑马乐优商城6

商品品牌的查询 上面就是我们需要根据分类id去找品牌 假设我们现在拿到的是 商品的分类id&#xff0c;我们需要根据分类id查询出对应的品牌即可 下面我们拿到上面的接口&#xff0c;直接撸代码 这个是和品牌相关联的操作&#xff0c;因为先去看一下BrandMapper,这个mapper是…

协议-SSL协议-基础概念01-SSL位置-协议套件-握手和加密过程-对比ipsec

SSL的位置-思维导图 参考来源&#xff1a; 华为培训ppt:HCSCE122_SSL VPN技术 ##SSL的位置 SSL协议套件 ​​​​握手阶段&#xff0c;完成验证&#xff0c;协商出密码套件&#xff0c;进而生成对称密钥&#xff0c;用于后续的加密通信。 加密通信阶段&#xff0c;数据由对…

深入理解红黑树

小白慎入&#xff01;本文难度比较高&#xff0c;需要对红黑树有一定的了解再来看&#xff01; 红黑树 红黑树是一种高级数据结构&#xff0c;是平衡树大家族中的一员&#xff0c;并且听名字就知道这个玩意不是凡物&#xff0c;可能你从未听过&#xff0c;但是你一定会为这样的…

微前端无界 项目使用记录

1预期目标和场景 一个vue框架开发的应用&#xff0c;需要使用另一个系统的页面。 通俗来说&#xff0c;就是在一个web应用中独立的运行另一个web应用 2 技术支持 微前端处理方案&#xff1a;无界 无界官网&#xff1a; https://wujie-micro.github.io/doc/guide/ CSDN 参考…