springcloud nacos 整合seata解决分布式事务

文章目录

    • nacos安装
    • Mysql5.7安装及表初始化
    • seata server安装
      • 下载并解压seata安装包
      • 在conf文件夹修改file.conf文件
      • 向本地数据库导入seata需要的表
      • 修改registry.conf文件
      • 将seata配置信息添加到nacos配置中心
      • 启动seata server
    • springcloud整合seata
      • 测试流程
        • 正常下单流程
        • 扣减库存失败流程

nacos安装

使用docker-compose安装,启动docker-compose up -d

docker-compose.yaml 文件如下:

version: "3.3"
services:nacos:image: docker-0.unsee.tech/nacos/nacos-server:latestcontainer_name: nacos-standaloneenvironment:- PREFER_HOST_MODE=hostname- MODE=standalonevolumes:- ./init.d/custom.properties:/home/nacos/init.d/custom.propertiesports:- 8848:8848

custom.properties 文件如下:

management.endpoints.web.exposure.include=*

Mysql5.7安装及表初始化

使用docker-compose安装,启动docker-compose up -d

docker-compose.yaml 文件如下:

version: '3.3'services:mysql:image: mysql:5.7  # 使用 MySQL 5.7 镜像container_name: mysql  # 容器名称ports:- "3306:3306"  # 将容器的 3306 端口映射到主机的 3306 端口environment:MYSQL_ROOT_PASSWORD: root  # 设置 root 用户的密码MYSQL_DATABASE: mydb  # 创建一个默认数据库MYSQL_USER: mysql  # 创建一个新用户MYSQL_PASSWORD: mysql  # 设置新用户的密码volumes:- mysql_data:/var/lib/mysql  # 持久化 MySQL 数据networks:- mysql_networkvolumes:mysql_data:  # 定义数据卷,用于持久化 MySQL 数据networks:mysql_network:  # 定义网络

seata server安装

下载并解压seata安装包

https://github.com/apache/incubator-seata/releases/download/v1.4.2/seata-server-1.4.2.tar.gz

在conf文件夹修改file.conf文件

  • 修改如下几行
mode = "db"url = "jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true"
user = "mysql"
password = "mysql"

向本地数据库导入seata需要的表

  • 创建名字为seata的数据库
  • 新建表branch_table、global_table、lock_table
CREATE TABLE `branch_table` (`branch_id` bigint NOT NULL,`xid` varchar(128) NOT NULL,`transaction_id` bigint DEFAULT NULL,`resource_group_id` varchar(32) DEFAULT NULL,`resource_id` varchar(256) DEFAULT NULL,`lock_key` varchar(128) DEFAULT NULL,`branch_type` varchar(8) DEFAULT NULL,`status` tinyint DEFAULT NULL,`client_id` varchar(64) DEFAULT NULL,`application_data` varchar(2000) DEFAULT NULL,`gmt_create` datetime DEFAULT NULL,`gmt_modified` datetime DEFAULT NULL,PRIMARY KEY (`branch_id`),KEY `idx_xid` (`xid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;CREATE TABLE `global_table` (`xid` varchar(128) NOT NULL,`transaction_id` bigint DEFAULT NULL,`status` tinyint NOT NULL,`application_id` varchar(32) DEFAULT NULL,`transaction_service_group` varchar(32) DEFAULT NULL,`transaction_name` varchar(128) DEFAULT NULL,`timeout` int DEFAULT NULL,`begin_time` bigint DEFAULT NULL,`application_data` varchar(2000) DEFAULT NULL,`gmt_create` datetime DEFAULT NULL,`gmt_modified` datetime DEFAULT NULL,PRIMARY KEY (`xid`),KEY `idx_gmt_modified_status` (`gmt_modified`,`status`),KEY `idx_transaction_id` (`transaction_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;CREATE TABLE `lock_table` (`row_key` varchar(128) NOT NULL,`xid` varchar(96) DEFAULT NULL,`transaction_id` mediumtext,`branch_id` mediumtext,`resource_id` varchar(256) DEFAULT NULL,`table_name` varchar(32) DEFAULT NULL,`pk` varchar(36) DEFAULT NULL,`gmt_create` datetime DEFAULT NULL,`gmt_modified` datetime DEFAULT NULL,PRIMARY KEY (`row_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

修改registry.conf文件

registry {# file 、nacos 、eureka、redis、zk、consul、etcd3、sofatype = "nacos"nacos {application = "seata-server"serverAddr = "127.0.0.1:8848"group = "SEATA_GROUP"namespace = ""cluster = "default"username = ""password = ""}
}config {# file、nacos 、apollo、zk、consul、etcd3type = "nacos"nacos {serverAddr = "127.0.0.1:8848"namespace = ""group = "SEATA_GROUP"username = ""password = ""dataId = "seataServer.properties"}
|

将seata配置信息添加到nacos配置中心

group 为 SEATA_GROUP

service.vgroupMapping 要和项目中spring.cloud.alibaba.seata.tx-service-group一致

service.vgroupMapping.order-service-group = default

启动seata server

./seata-server.sh -h 192.168.56.112

在这里插入图片描述

springcloud整合seata

项目地址:https://github.com/fafeidou/fast-cloud-nacos/tree/master/seata 可以参考

项目流程:用户下单时,创建订单是一个微服务(order-service-2pc),扣减库存是另外一个微服务(storage-service-2pc),默认是AT模式。

项目准备:创建两个数据库,分别是seata_storageseata_order,两个数据执行文件分别为seata_storage.sqlseata_order.sql(在storage-service-2pc目录下)

测试流程

正常下单流程
  • 初始化库存为1000
    在这里插入图片描述
  • 访问 http://localhost:9091/order/placeOrder/commit
  • 查询库存表及订单表,生成了订单及扣减库存成功
    在这里插入图片描述
    在这里插入图片描述
扣减库存失败流程
  • 访问 http://localhost:9091/order/placeOrder/rollback

在这里插入图片描述

  • 查询库存服务日志
    在这里插入图片描述
  • 检查订单表和库存表,没有生成新的订单及扣减库存,分布式事务成功回滚了

在这里插入图片描述
在这里插入图片描述

  • 查看seata server 日志,发现有回滚日志。发现事务id和服务中的事务id是同一个(192.168.56.112:8091:4107905583825276934)
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux搜索查找类指令

1、find指令 基本语法:find [搜索范围] [选项] 功能:将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或目录显示在终端。 常用选项: 操作 命令示例 说明 查找指定路径下的所有文件 find /path/to/dir 查找指定目…

uniapp 网络请求封装(uni.request 与 uView-Plus)

一、背景 在开发项目中,需要经常与后端服务器进行交互;为了提高开发效率和代码维护性,以及降低重复性代码,便对网络请求进行封装统一管理。 二、创建环境文件 2.1、根目录新建utils文件夹,utils文件夹内新建env.js文…

ReentrantLock 用法与源码剖析笔记

📒 ReentrantLock 用法与源码剖析笔记 🚀 一、ReentrantLock 核心特性 🔄 可重入性:同一线程可重复获取锁(最大递归次数为 Integer.MAX_VALUE)🔧 公平性:支持公平锁(按等…

【蓝桥杯单片机】客观题

一、第十三届省赛(一) 二、第十三届省赛(二)

数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表

一. 使用工具和命令 1.1 使用的工具 Navicat Premium 17 :“Navicat”是一套可创建多个连接的数据库管理工具。 MySQL版本8.0.39 。 1.2 使用的命令 Navicat中使用的命令 命令 命令解释 SHOW DATABASES; 展示所有的数据库 CREATE DATABASE 数据…

deepseek清华大学第二版 如何获取 DeepSeek如何赋能职场应用 PDF文档 电子档(附下载)

deepseek清华大学第二版 DeepSeek如何赋能职场 pdf文件完整版下载 https://pan.baidu.com/s/1aQcNS8UleMldcoH0Jc6C6A?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/3ee62050a2ac

【Linux Oracle】time命令+oracle exp压缩

Linux && Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.说明 Linux中的time命令:主要用于测量命令的执行时间,并显示该命令在执行过程中所使用的系统资源情况,如CPU时间、内存和…

游戏引擎学习第123天

仓库:https://gitee.com/mrxiao_com/2d_game_3 黑板:线程同步/通信 目标是从零开始编写一个完整的游戏。我们不使用引擎,也不依赖任何库,完全自己编写游戏所需的所有代码。我们做这个节目不仅是为了教育目的,同时也是因为编程本…

MCP协议

原理讲解 基础概念 Introduction - Model Context Protocol MCP Host:想要通过 MCP 访问数据的程序,例如 Claude Desktop、IDE 或 AI 工具MCP Clients:与服务器保持 1:1 连接的协议客户端MCP Servers:轻量级程序,每个…

Maven环境搭建

Maven 1. 概述 ApacheMaven是一个软件项目管理和构建工具。基于项目对象模型(POM)的概念,Maven可以从中心信息中管理项目的构建、报告和文档 理解: maven构建项目(100%)而且帮你完成jar的统一管理。 思考: 原来的jar—…

llaMa模型的创新

LLaMa介绍 LLaMa是基于transformer encoder的生成式模型。 目前有:LLAMA, LLAMA2, LLAMA3 三个大的版本 论文 LLAMA 2: Open Foundation and Fine-Tuned Chat Models: https://arxiv.org/pdf/2307.09288 LLAMA 3: The Llama 3 Herd of Models https…

渗透测试实验

1、seacmsv9注入管理员密码 获取管理员账号(name) http://www.test2.com/comment/api/index.php?gid1&page2&rlist[]%27,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20(name)from%20sea_admin))),%27 2、获取管理员密码 http://www…

文心一言AI创意画

介绍 文心一言是百度推出的新一代知识增强大语言模型,属于文心大模型家族的新成员。‌它能够与人对话互动、回答问题、协助创作,高效便捷地帮助人们获取信息、知识和灵感。‌ 特点 文心一言基于数万亿数据和数千亿知识进行融合学习,采用预训…

安装VM和Centos

安装VM 一、打开虚拟机 二、选择典型 三、选择光盘 四、指定虚拟机位置 五、设置磁盘大小并拆分为多个文件 六、完成 安装Centos 一、上述过程完成后我们直接打开虚拟机 二、语言选择中文 三、默认安装位置并点击完成 四、点击开始安装 五、点击设置密码 设置完密码后点击完成…

优选算法大集合(待更新)

1.双指针 1.1.移动零 leetcode链接:283. 移动零 - 力扣(LeetCode)​​​​​​ 移动零的问题我们可以将它归类为数组划分的问题,我们将数组划分为非零部分和零部分。我们会使用到双指针的算法,在这里,我…

微信小程序面试题

微信小程序面试题 微信小程序页面的生命周期函数主要包括哪些? onLoad: 页面加载时触发。一个页面只会调用一次,可以在onLoad的参数中获取打开当前页面路径中的参数。 onShow: 页面显示时触发调用。 onReady: 页面初次渲染完成时触发,一个页面只会调…

Git详解及常用命令

一、Git概述 官网:https://git-scm.com/ 安装:安装适合自己的版本,默认安装即可 使用:选择一个文件夹,右键,当出现:Git Bash后说明安装成功,后续使用都是基于Git Bash Git简介 G…

MongoDB 面试题目

一、基础概念 MongoDB 的特点是什么? MongoDB是一种NoSQL数据库,具有以下特点: 文档存储模型 MongoDB 使用 BSON(Binary JSON) 格式存储数据,数据以文档的形式组织,类似于JSON对象。文档可以包…

路由追踪核心技术深度解析:Traceroute与Tracert命令实战指南(跨平台/抓包/网络安全防护)

目录 路由器是什么? 路由器的基本功能: 路由追踪技术(Traceroute) 路由追踪的工作原理 实现技术 路由追踪的输出示例 路由追踪的用途 traceroute 命令(Linux 和 macOS) 基本语法 常用选项 示例 …

4部署kibana:5601

kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,, 是一个开源和免费的工具 Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面, 可以帮你汇总、分析和搜索重要数据日志 1.安装-所有的es节点 # tar xf kibana-6.4.1-linux-x86_64.t…