zoukankan      html  css  js  c++  java
  • 开源的分布式事务框架 springcloud Alibaba Seata 的搭建使用 一次把坑踩完。。。

    seata的使用

     

    1. Seata 概述

    Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来。

    Seata 是阿里开源的分布式事务框架,属于二阶段提交模式。

    目前github上已经有 12267 颗星了,也很活跃,最新的提交时间很多都是几天前。

    Seata 有一个重要的机制:行锁+回滚日志

    每个分支事务对应的数据库中都需要有一个回滚日志表 UNDO_LOG,在真正修改数据库记录之前,都会先记录修改前的记录值,以便之后回滚。

    在收到回滚请求后,就会根据 UNDO_LOG 生成回滚操作的 SQL 语句来执行。

    如果收到的是提交请求,就把 UNDO_LOG 中的相应记录删除掉

    原理就是spring的aop 有前置处理和后置处理我们的业务SQL语句 这里就不多说了 ,可以自行了解

    下面开打:

    先下载安装Seata的服务端了 我这边用的0.9.0版的  

    先来张图:截了一部分 哈哈

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

    链接:https://pan.baidu.com/s/1lcfS8MjRKf64dbGP8BgEZQ
    提取码:th3j

    这个是网盘下载好的包或者自己去seata官网下载 不多说了

    解压进入到seata-server.bat文件中编辑

     替换

    %JAVACMD% %JAVA_OPTS% -server -Xmx700m -Xms700m -Xmn512m -Xss512k -XX:SurvivorRatio=10 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m -XX:MaxDirectMemorySize=512m -XX:-OmitStackTraceInFastThrow -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:-UseAdaptiveSizePolicy -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASEDIR}/logs/java_heapdump.hprof -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -Xloggc:${BASEDIR}/logs/seata_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dio.netty.leakDetectionLevel=advanced -classpath %CLASSPATH% -Dapp.name="seata-server" -Dapp.repo="%REPO%" -Dapp.home="%BASEDIR%" -Dbasedir="%BASEDIR%" io.seata.server.Server %CMD_LINE_ARGS%

    改这个的原因是我的电脑是16G的seata消耗内存 顶不住  电脑好的不用改了

     编辑这个两个文件:

    测试用的MySQL数据库:

    MySQL的驱动 5和6是不一样的 我用的5这个版本 

    注册中心用的nacos 和Alibaba的配套起来 用其他的也行 

    保存保存。。。

    seata 的环境就搞好了 

    接下来启动nacos   这里就不说了  

    MySQL数据库的创建和配置:

    CREATE DATABASE seata;
    USE seata;

    -- the table to store GlobalSession data
    drop table if exists `global_table`;
    create table `global_table` (
    `xid` varchar(128) not null,
    `transaction_id` bigint,
    `status` tinyint not null,
    `application_id` varchar(32),
    `transaction_service_group` varchar(32),
    `transaction_name` varchar(128),
    `timeout` int,
    `begin_time` bigint,
    `application_data` varchar(2000),
    `gmt_create` datetime,
    `gmt_modified` datetime,
    primary key (`xid`),
    key `idx_gmt_modified_status` (`gmt_modified`, `status`),
    key `idx_transaction_id` (`transaction_id`)
    );

    -- the table to store BranchSession data
    drop table if exists `branch_table`;
    create table `branch_table` (
    `branch_id` bigint not null,
    `xid` varchar(128) not null,
    `transaction_id` bigint ,
    `resource_group_id` varchar(32),
    `resource_id` varchar(256) ,
    `lock_key` varchar(128) ,
    `branch_type` varchar(8) ,
    `status` tinyint,
    `client_id` varchar(64),
    `application_data` varchar(2000),
    `gmt_create` datetime,
    `gmt_modified` datetime,
    primary key (`branch_id`),
    key `idx_xid` (`xid`)
    );

    -- the table to store lock data
    drop table if exists `lock_table`;
    create table `lock_table` (
    `row_key` varchar(128) not null,
    `xid` varchar(96),
    `transaction_id` long ,
    `branch_id` long,
    `resource_id` varchar(256) ,
    `table_name` varchar(32) ,
    `pk` varchar(36) ,
    `gmt_create` datetime ,
    `gmt_modified` datetime,
    primary key(`row_key`)
    );

    在MySQL执行这些SQL就可以了

     双击。。。

    到此 启动完成:

    访问nacos的界面

    http://localhost:8848/nacos

     用户名和密码都是 nacos

    seata 的服务也注册到nacos了  接下来就是 项目环境的搭建了 后面再说  因为要打游戏了。。。

  • 相关阅读:
    linux basename 和 dirname 获取当前路径
    灵活的装饰器
    ubuntu 20version install wechat
    git pull 总提示让输入merge 信息
    Linux脚本中$#、$0、$1、$@、$*、$$、$?
    ansible
    MMD讲解
    再生希尔伯特空间与核函数讲解
    流形学习
    聚类
  • 原文地址:https://www.cnblogs.com/niCong/p/15515183.html
Copyright © 2011-2022 走看看