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

news/2025/2/27 4:49:38

文章目录

    • 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:latest
        container_name: nacos-standalone
        environment:
            - PREFER_HOST_MODE=hostname
            - MODE=standalone
        volumes:
            - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
        ports:
            - 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_network

volumes:
  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、sofa
  type = "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、etcd3
  type = "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

在这里插入图片描述

springcloudseata_190">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.niftyadmin.cn/n/5869453.html

相关文章

学习路程四 向量数据库Milvus安装与连接

前序 在之前,已经简单完成了文档的加载,分割,向量化这些步骤,最后得到了结果。但是这些数据都是一次性的。假设一个律师所,有几千上万份卷宗,不可能每次使用都重新向量化数据吧。 所以我们需要有一个地方存…

LangChain系列:精通LangChain的合并文档链

LangChain的合并链旨在解决语言模型处理长文本时的上下文限制问题,包含Stuff、MapReduce、Refine和Rerank四种策略。Stuff链通过简单拼接文档块实现快速处理,适用于短文本但受限于模型token容量;MapReduce链采用分治思想,先独立处…

Gradio全解11——使用transformers.agents构建Gradio UI(6)

大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(6) 前言本篇摘要11. 使用transformers.agents构建Gradio UI11.6 通过agents构建Gradio UI11.6.1 ChatMessage数据类1. 数据结构2. 例程11.6.2 构建Gradio UI示例1. 代码及运行2. 代码解读参考文献前言 本…

【HTML— 快速入门】HTML 基础

准备工作 vscode下载 百度网盘 Subline Text 下载 Sublime Text下载 百度网盘 vscode 下载 Sublime Text 是一款轻量好用的文本编辑器,我们在写前端代码时,使用 Sublime Text 打开比使用记事本打开,得到的代码体验更好,比 vscode…

学习笔记05——HashMap实现原理及源码解析(JDK8)

HashMap实现原理及源码解析(JDK8) 一、核心设计思想 数组链表红黑树:桶数组存储Node节点,哈希冲突时形成链表,链表长度≥8且桶数量≥64时转红黑树扰动函数:(h key.hashCode()) ^ (h >>> 16) 消除…

springBoot统一响应类型3.0版本

前言&#xff1a;起于环境&#xff0c;先于实践&#xff0c;源于变化&#xff0c;升于思考&#xff0c;再于实践&#xff0c;形于总结——实践至上&#xff01; 简单回顾&#xff1a; /*** 基础统一响应类* param <T>*/Data public class apiResult<T> {private in…

九、数据治理架构流程

一、总体结构 《数据治理架构流程图》&#xff08;Data Governance Architecture Flowchart&#xff09; 水平结构&#xff1a;流程图采用水平组织&#xff0c;显示从数据源到数据应用的进程。 垂直结构&#xff1a;每个水平部分进一步划分为垂直列&#xff0c;代表数据治理的…

在WINDOWS系统使用CMake gui编译NLopt配合VSCode使用

1. 准备工作 安装CMake&#xff1a;从CMake官网下载并安装CMake。下载Nlopt源码&#xff1a;从Nlopt官网或GitHub仓库下载Nlopt源码。安装编译器&#xff1a;确保已安装Visual Studio或其他支持的编译器&#xff08;如MinGW&#xff09;。 2. 配置CMake 方式1 打开CMake GU…