三十九、分布式事务、seata、配置微服务客户端

news2024/11/17 23:41:48

1、事务

事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列SQL操作,这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行。

1.1 ACID事务的特点

原子性: 一致性:隔离性持久性

1.2 事务并发带来的问题

脏读   幻读  不可重复读  丢失修改

1.3 我们可以使用事务的隔离级别来解决

读未提交

读已提交

可重复读

串行化

2、分布式事务

2.1 如何解决分布式问题

1. 借助rabbitMQ消息中间件

2. 可以自己编写代码完成分布式事务。

3. 借助于第三方分布式事务服务器。---阿里巴巴seata---分布式事务问题

2.2 演示一下分布式事务

.idea 会采用原来项目的jdk 和maven

删除会重新配置自己的jdk和maven

新建三个数据库,将sql导入到数据库中

 

运行这三个主启动类

浏览器访问

http://localhost:8001/order/addOrder?userId=1&productId=1&count=5&money=100

运行浏览器命令后 数据库中查看效果

手动添加异常

重启服务

本地事务无法解决---分布式微服务调用的事务

2.3 介绍seata

Seata部署指南

 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT[两次提交]、TCC、SAGA 和XA 事务模式,为用户打造一站式的分布式解决方案。

Seata的执行流程如下:

1. A服务【订单微服务】的TM[事务发起者]向TC[seata服务端]申请开启一个全局事务,TC就会创建一个全局事务并返回一个唯一的XID

2. A服务开始远程调用B服务【账户微服务】,此时XID会在微服务的调用链上传播

3. B服务的RM向TC注册分支事务,并将其纳入XID对应的全局事务的管辖

4. B服务执行分支事务,向数据库做操作

5. 全局事务调用链处理完毕,TM根据有无异常向TC发起全局事务的提交或者回滚

6. TC协调其管辖之下的所有分支事务,决定是否回滚

TM:事务发起者【在哪个方法上添加了全局事务注解的】

TC : 事务管理器【seata的服务端】

RM: 每个操作数据库的微服务

XID: 全局事务id

2.4 搭建seata服务器

2.4.1下载seata1.3.0

支持集群模式--集群模式

Release v1.3.0 · seata/seata · GitHub

2.4.2解压

2.4.3修改conf/file.conf

E:\software\seata-server\seata-server-1.3.0\seata\conf\file.conf

让seata集群信息可以共享,我们应该修改它的保存位置:

 2.4.4创建数据库并导入表结构

sql在源码中有 

把script脚本文件复制到E:\software\seata-server\seata-server-1.3.0\seata

将mysql.sql里的sql语句复制到seata数据库中,运行

2.4.5指定seata的注册中心地址和配置中心的内容

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 = ""
    cluster = "default"
    username = "nacos"
    password = "nacos"
  }
}

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

  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
  }
}

 2.4.6需要把seata哪些配置项放入nacos配置中心呢

E:\software\seata-server\seata-server-1.3.0\seata\script\config-center

2.4.7使用nacos/nacos-fonfig.sh 把配置信息放入nacos配置中心

如果想人为指定nacos配置中心的地址

./nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP

参数说明:

-h :host 默认值localhost

-p :port 默认值 8848

-g :配置分组,默认值为SEATA_GROUP

-t :租户信息,对应Nacos的命名空间ID字段,默认值为空
 

浏览器访问

2.5 配置微服务客户端

2.5.1在每个数据库中创建unlog表

日志表:日志回退表

use seata_account;
-- for AT mode you must to init this sql for you business database. the seata server not need it.
CREATE TABLE IF NOT EXISTS `undo_log`
(
    `branch_id`     BIGINT(20)   NOT NULL COMMENT 'branch transaction id',
    `xid`           VARCHAR(100) NOT NULL COMMENT 'global transaction id',
    `context`       VARCHAR(128) NOT NULL COMMENT 'undo_log context,such as serialization',
    `rollback_info` LONGBLOB     NOT NULL COMMENT 'rollback info',
    `log_status`    INT(11)      NOT NULL COMMENT '0:normal status,1:defense status',
    `log_created`   DATETIME(6)  NOT NULL COMMENT 'create datetime',
    `log_modified`  DATETIME(6)  NOT NULL COMMENT 'modify datetime',
    UNIQUE KEY `ux_undo_log` (`xid`, `branch_id`)
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  DEFAULT CHARSET = utf8 COMMENT ='AT transaction mode undo table';
f

 

2.5.2在每个微服务中添加seata依赖

        <!--seata一定要保证和seata服务的版本匹配-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
        </dependency>

2.5.3修改每个微服务的配置文件

server:
  port: 8002
spring:
  # 数据源配置
  datasource:
    url: jdbc:mysql://localhost:3306/seata_account?serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: admin
  application:
    name: seata-account
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

    alibaba:
      seata:
        #值必须和config.txt文件中的分组名一致
        tx-service-group: guangzhou

# 配置mybatis映射文件的路径
mybatis:
  mapperLocations: classpath:mapper/*.xml
logging:
  level:
    com.ykq.dao: debug

#指定seata服务器在nacos的注册中心地址
seata:
  registry:
    type: nacos
    nacos:
      # 指定seata服务器在注册中心的地址
      server-addr: localhost:8848
      username: nacos
      password: nacos
      #指定seata服务器在注册中心的组名 默认SEATA_GROUP
      group: SEATA_GROUP
      # 指定seata服务器在注册中心的服务名称 默认 seata-server
      application: seata-server
  config:
    type: nacos
    nacos:
      server-addr: localhost:8848
      username: nacos
      password: nacos
      group: SEATA_GROUP

 修改一个,运行试试,不报错再改剩余两个

一共两步:引入依赖,修改配置文件

后台要启动seata,nacos

 

 

2.5.4在订单接口中@GlobalTransactional 

@GlobalTransactional //分布式事务---当看到该注解 表示方法是事务的发起者TM

浏览器访问

手动加个异常

浏览器访问

 数据库没有变化

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

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

相关文章

TCL字符串操作

format命令 因为 TCL 把所有的输入都当作字符串看待&#xff0c;所以 TCL 提供了较强的字符串操作功能&#xff0c;TCL 中与 字符串操作有关的命令有&#xff1a;string、format、regexp、regsub、scan 等。 语法&#xff1a;format formatstring ?vlue value...? format …

【Redis】电商项目秒杀问题之下单接口优化:Redis缓存、MQ以及lua脚本优化高并发背景下的秒杀下单问题

目录 一、优化思路 二、缓存库存与订单 1、库存缓存的redis数据结构 2、订单信息缓存的redis数据结构 三、整体流程 四、lua脚本确保权限校验操作的原子性 一、优化思路 【Redis】电商项目秒杀问题之超卖问题与一人一单问题_1373i的博客-CSDN博客https://blog.csdn.net/q…

chatgpt赋能Python-python3_打印

Python3 打印&#xff1a;一篇介绍性SEO文章 如果你是一名Python编程工程师&#xff0c;那么你一定知道在Python中打印是一项基本技能。在Python3中&#xff0c;打印已经发生了一些变化&#xff0c;本文将介绍Python3中打印的新特性和使用方法&#xff0c;并为您提供一些最佳实…

算法设计与分析:随机化算法(作业-必做)(头歌实验)

第1关&#xff1a;硬币实验 任务描述 本关任务&#xff1a;计算机产生的伪随机数来模拟抛硬币试验。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.如何获取数组的长度&#xff0c;2.如何遍历数组。 随机数 随机数在随机化算法设计中扮演着十分重要的角…

云原生CAx软件:gRPC

gRPC是Google基于HTTP/2协议开发的一套开源、跨平台的高性能RPC框架&#xff0c;可用于连接微服务架构内的各种服务&#xff0c;亦可以连接客户端与后端服务。 Ref. from gRPC gRPC is a modern open source high performance Remote Procedure Call (RPC) framework that can…

策划能力提升攻略:让你成为行业大咖

策划能力的提高是没有立竿见影的&#xff0c;首先你了解策划的本质吗?了解市场营销的本质吗?了解战略和策略的关系吗? 不是经常把什么IMC/USP/4P/4C/DNA/核心价值挂在嘴边&#xff0c;会做做波特SWOT分析、用用BCG的模型、MINKSY的7S模型这些就是策划了的。 别人的理论你可…

WEB AK赛

文章目录 web1_观字SSRF常见的URL绕过方式 web2_观星web3_观图web4_观心签到_观己 web1_观字 <?php#flag in http://192.168.7.68/flag if(isset($_GET[url])){$url $_GET[url];$protocol substr($url, 0,7);if($protocol!http://){die(仅限http协议访问);}if(preg_matc…

安装Maven 3.6.1:图文详细教程(适用于Windows系统)

一、官网下载对应版本 推荐使用maven3.6.1版本&#xff0c;对应下载链接&#xff1a; Maven3.6.1下载地址 或者&#xff0c;这里提供csdn下载地址&#xff0c;点击下载即可&#xff1a; Maven3.6.1直链下载 其他版本下载地址&#xff1a; 进入网址&#xff1a;http://mave…

【Linux之IO系统编程学习】01.open函数使用 代码实现touch命令效果

【Linux之IO系统编程学习】 项目代码获取&#xff1a;https://gitee.com/chenshao777/linux_-io.git &#xff08;麻烦点个免费的Star哦&#xff0c;您的Star就是我的写作动力&#xff01;&#xff09; 01.open函数使用 & 代码实现touch命令 一、open函数&#xff08;ma…

ARM处理器概论与组织

目录 1.ARM产品系列 2.体系结构 3.ARM指令集 定义&#xff1a; ARM的指令集&#xff1a; 4.编译原理 5.ARM存储模型 6.ARM的8种工作方式 ARM&#xff08;Advanced RISC Machines&#xff09;有三种含义 一个公司的名称、一类处理器的通称、一种技术&#xff0c;我们在这…

【中阳期货】人工智能AI与期货有什么 关系

人工智能&#xff08;AI&#xff09;和期货交易之间有许多相互影响的因素。AI可以帮助期货交易者在交易决策中更好地应对大量数据&#xff0c;加强交易系统预测能力&#xff0c;优化资产配置策略。以下是AI与期货交易的一些具体关系&#xff1a; 数据分析&#xff1a;AI有能力高…

python pickle反序列化分析

文章目录 前言Pickle的作用pickle反序列化pickletools和反序列化流程漏洞产生(__reduce__)R指令的绕过通过i和o指令触发 总结 前言 春秋杯中遇到了一道python题&#xff0c;使用的了numpy.loads()触发反序列化漏洞&#xff0c;百度学习了一下&#xff0c;发现numpy.load()会先…

【mysqlbinlog 恢复数据】

不小心把数据删掉了 首先要拿到binlog文件 命令行执行 /usr/local/mysql/bin/mysqlbinlog --base64-outputdecode-rows --start-datetime"2023-05-19 09:01:32" --stop-datetime"2023-05-19 09:01:35" -v /Users/zylong/Downloads/mysql-bin.003178 --re…

动态规划-状态机模型

大盗阿福 题目 链接&#xff1a;https://www.acwing.com/problem/content/1051/ 阿福是一名经验丰富的大盗。趁着月黑风高&#xff0c;阿福打算今晚洗劫一条街上的店铺。 这条街上一共有 N N N 家店铺&#xff0c;每家店中都有一些现金。 阿福事先调查得知&#xff0c;只…

chatgpt赋能Python-python3_9怎么下载

Python 3.9: 从哪里下载以及如何安装 Python是一种高级编程语言&#xff0c;被广泛使用于数据科学、人工智能、Web开发等领域。Python的最新版本是Python 3.9&#xff0c;它带来了一些新的特性和改进。对于那些希望尝试Python 3.9的人来说&#xff0c;了解如何下载和安装是很重…

chatgpt赋能Python-python3下载文件

Python3下载文件&#xff1a;从入门到实践 在Python编程语言中&#xff0c;下载文件是一个常见的需求。无论你是想下载图片、视频、文本文件或者其他类型的文件&#xff0c;Python都提供了强大的工具来实现这一操作。在本文中&#xff0c;我们将深入探讨如何使用Python3来下载…

pwn入门(二)环境搭建

一.前言 在上一篇中介绍了一下pwn和一些前置知识&#xff0c;但是呢以我的感觉&#xff0c;我觉得ctf还是得多做题的&#xff0c;所以呢&#xff0c;我选择边做边学&#xff0c;我觉得这样可以快速熟悉pwn还可以有成就感。 这一篇就是搭建环境的分享&#xff0c;同时还有大佬告…

【问题记录】USB monitor抓包工具显示音频数据CRC error

一&#xff0c;简介 在进行UAC2.0调试的过程中&#xff0c;使用USB monitor抓包工具抓取音频流数据出现数据错乱现象&#xff0c;本文对该问题进行分析记录。 二&#xff0c;问题记录及分析过程 2.1 先看下正常的抓包数据是什么样子&#xff1a; 从上图可以看出&#xff0c;…

VMware ESXi 6.0 多网卡接入 多网段绑定 虚机接入不同网段

网卡要与对应网段的网络联通。不同的网卡接入不同网段的网络。要为vmware esxi 6 的多个虚机配置不同网段的ip地址&#xff0c;首先选择主机对应的网口分别插上处于在不同网段的网线。 配置管理网络 多个网口接入&#xff0c;只可以配置一个管理网络&#xff0c;就是只有一个网…

基于XGBOOST模型预测货物运输耗时 - Part 2 通过方差分析了解文本型变量与数值型目标变量的关系

在分析数据之前&#xff0c;我们需要剔除异常值的影响&#xff0c;也就是在某个分组情况下&#xff0c;标准差过大&#xff08;标准差越大&#xff0c;证明情况越不稳定&#xff09;&#xff0c;如果标准差比较小&#xff0c;就算是最小值和最大值差的比较大&#xff0c;我也认…