当前位置: 首页 > news >正文

创建一个网站流程中国网站访问量排行

创建一个网站流程,中国网站访问量排行,网站底部版权怎么做,长沙网页设计哪个公司好文章目录 一. Seata简介二. 官方文档三. Seata分布式事务代码实现0. 环境简介1. 添加undo_log表2. 添加依赖3. 添加配置4. 开启Seata事务管理5. 启动演示 四. Seata Server配置Nacos1. 修改配置类型2. 创建Nacos配置 五. Seata Client配置Nacos1. 增加Seata关联Nacos的配置2. 在…

文章目录

  • 一. Seata简介
  • 二. 官方文档
  • 三. Seata分布式事务代码实现
    • 0. 环境简介
    • 1. 添加undo_log表
    • 2. 添加依赖
    • 3. 添加配置
    • 4. 开启Seata事务管理
    • 5. 启动演示
  • 四. Seata Server配置Nacos
    • 1. 修改配置类型
    • 2. 创建Nacos配置
  • 五. Seata Client配置Nacos
    • 1. 增加Seata关联Nacos的配置
    • 2. 在Nacos中对应的train-group添加配置
    • 3. 测试有效性

一. Seata简介

Seata 是一款开源的分布式事务解决方案,旨在解决微服务架构下的数据一致性问题。它支持 AT、TCC、Saga 和 XA 四种事务模式,能够适应不同的业务场景。

  • AT模式,默认,简单,需要增加undo_log表,生成反向SQL,性能高;回滚后,原来没数据的,现在还是没数据
  • TCC模式,try confirm/cancel,三个阶段的代码都得自己实现,Seata只负责调度;对业务代码侵入性较强,必要时可能还要修改数据库
  • SAGA模式,长事务解决方案,需要程序员自己编写两阶段代码(AT模式不需要写第二阶段);基于状态机来实现的,需要一个JSON文件,可异步执行
  • XA模式,XA 协议是由 X/Open 组织提出的分布式事务处理规范,基于数据库的XA协议来实现2PC发称为XA方案,适用于强一致性的场景,比如金融、银行等

Seata 的核心架构包括事务协调器(TC)、事务管理器(TM)和资源管理器(RM),通过两阶段提交协议实现全局事务的管理。其优势在于对业务代码侵入性低、性能高效,且与 Spring Cloud、Dubbo 等主流微服务框架无缝集成,是构建高可靠分布式系统的理想选择。

二. 官方文档

官方文档
下载地址
GitHub 仓库
Seata 示例项目

三. Seata分布式事务代码实现

接下来将用代码模拟AT模式的分布式事务管理。

0. 环境简介

项目模拟12306会员购票场景,购票后需要进行余票更新以及会员购票信息保存的操作,分别对应business模块和member模块的操作。要求business通过feign调用member的保存功能。

此时如果用传统事务注解@Transactional,仅仅在business模块的方法进行事务管理,是无法管理远程调用的模块同样进行回滚的。

此时就要用到Seata进行分布式事务管理,同时演示的是AT模式,自动生成反向SQL。

1. 添加undo_log表

businessmember数据库中添加undo_log表,执行SQL:

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. 添加依赖

businessmember模块中添加Seata依赖:

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

3. 添加配置

businessmember模块的bootstrap.properties添加配置:

# 事务组名称service.vgroupMapping.train-group=default
seata.tx-service-group=train-group
# 事务组和seata集群做关联
seata.service.vgroup-mapping.train-group=default
# seata集群对应的机器
seata.service.grouplist.default=127.0.0.1:8091

一个项目的多个模块,配置成同一个事务组

4. 开启Seata事务管理

仅需要service业务逻辑方法上添加注解,即可开启Seata事务管理:

import io.seata.spring.annotation.GlobalTransactional;@GlobalTransactional

5. 启动演示

  • 启动Seata服务
    解压Seata文件夹,双击bin目录下的seata-server.bat
    在这里插入图片描述
    在这里插入图片描述

Seata服务可视化界面启动在7091端口,而监听端口是8091

  • 启动SpringBoot服务
    在这里插入图片描述

在这里插入图片描述

可以看到启动后Seata打印的日志,表明SpringBoot应用和Seata成功连接,成功注册两个TM和RM

  • 异常设置
    为了显示事务回滚效果,在member模块保存的业务逻辑中,手动添加事务异常:
    public void save(MemberTicketReq req) throws Exception {LOG.info("seata全局事务ID save: {}", RootContext.getXID());DateTime now = DateTime.now();Ticket ticket = BeanUtil.copyProperties(req, Ticket.class);ticket.setId(SnowUtil.getSnowflakeNextId());ticket.setCreateTime(now);ticket.setUpdateTime(now);ticketMapper.insert(ticket);// 模拟被调用方出现异常if (1 == 1) {throw new Exception("测试异常11");}}

预计效果为,Seata回滚余票更新,并向前端抛出异常

  • 测试结果
    在这里插入图片描述
    在这里插入图片描述

与预期结果相同,测试成功!

四. Seata Server配置Nacos

让Nacos统一设置Seata Server的配置,以免再去手动修改配置文件。

nacos的介绍和使用可以参考我之前的博客:传送门

1. 修改配置类型

  • 打开配置文件seata\conf\application.yml,修改以下内容:
seata:config:# support: nacos, consul, apollo, zk, etcd3type: fileregistry:# support: nacos, eureka, redis, zk, consul, etcd3, sofatype: file

更改为nacos的注册中心和配置中心:

seata:config:# support: nacos, consul, apollo, zk, etcd3type: nacosnacos:server-addr: 127.0.0.1:8848namespace: traingroup: SEATA_GROUPusername: nacospassword: nacoscontext-path:##if use MSE Nacos with auth, mutex with username/password attribute#access-key:#secret-key:data-id: seataServer.propertiesregistry:# support: nacos, eureka, redis, zk, consul, etcd3, sofatype: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:8848group: SEATA_GROUPnamespace: traincluster: defaultusername: nacospassword: nacoscontext-path:##if use MSE Nacos with auth, mutex with username/password attribute#access-key:#secret-key:

!!! 注意每个:后面都要空一格
namespace: 设置nacos中的命名空间,用于项目间隔离
group:nacos中分组名称
username和password:nacos的用户名和密码,默认都为nacos

  • 重启Seata服务
    在这里插入图片描述

可见配置已生效,注册服务成功。登录Nacos客户端也可以看到配置的服务:
在这里插入图片描述

2. 创建Nacos配置

  • 创建本地数据库seata:
    在seata数据库中执行以下sql语句,创建四张表:
-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `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_status_gmt_modified` (`status` , `gmt_modified`),KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4;-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(`branch_id`         BIGINT       NOT NULL,`xid`               VARCHAR(128) NOT NULL,`transaction_id`    BIGINT,`resource_group_id` VARCHAR(32),`resource_id`       VARCHAR(256),`branch_type`       VARCHAR(8),`status`            TINYINT,`client_id`         VARCHAR(64),`application_data`  VARCHAR(2000),`gmt_create`        DATETIME(6),`gmt_modified`      DATETIME(6),PRIMARY KEY (`branch_id`),KEY `idx_xid` (`xid`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4;-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(`row_key`        VARCHAR(128) NOT NULL,`xid`            VARCHAR(128),`transaction_id` BIGINT,`branch_id`      BIGINT       NOT NULL,`resource_id`    VARCHAR(256),`table_name`     VARCHAR(32),`pk`             VARCHAR(36),`status`         TINYINT      NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',`gmt_create`     DATETIME,`gmt_modified`   DATETIME,PRIMARY KEY (`row_key`),KEY `idx_status` (`status`),KEY `idx_branch_id` (`branch_id`),KEY `idx_xid` (`xid`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4;CREATE TABLE IF NOT EXISTS `distributed_lock`
(`lock_key`       CHAR(20) NOT NULL,`lock_value`     VARCHAR(20) NOT NULL,`expire`         BIGINT,primary key (`lock_key`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4;INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('AsyncCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryCommitting', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('RetryRollbacking', ' ', 0);
INSERT INTO `distributed_lock` (lock_key, lock_value, expire) VALUES ('TxTimeoutCheck', ' ', 0);
  • 新建配置如下:
    在这里插入图片描述
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true
store.db.user=seata
store.db.password=seata

数据库、用户名和密码需要修改为自己的

这样就成功利用Nacos管理Seata的服务端配置了!

五. Seata Client配置Nacos

接下来还需要用Nacos管理Seata的客户端配置。

1. 增加Seata关联Nacos的配置

在Seata管理的模块的bootstrap.properties中添加Nacos配置:

# seata注册中心,要和seata server的application.yml配置保持一致
seata.registry.type=nacos
seata.registry.nacos.application=seata-server
seata.registry.nacos.server-addr=127.0.0.1:8848
seata.registry.nacos.group=SEATA_GROUP
seata.registry.nacos.namespace=train
seata.registry.nacos.username=nacos
seata.registry.nacos.password=nacos# seata配置中心,要和seata server的application.yml配置保持一致
seata.config.type=nacos
seata.config.nacos.server-addr=127.0.0.1:8848
seata.config.nacos.group=SEATA_GROUP
seata.config.nacos.namespace=train
seata.config.nacos.dataId=seataServer.properties
seata.config.nacos.username=nacos
seata.config.nacos.password=nacos# 事务组名称,必须在nacos中有配置过:service.vgroupMapping.train-group=default
seata.tx-service-group=train-group

2. 在Nacos中对应的train-group添加配置

在这里插入图片描述

service.vgroupMapping.train-group=default
service.default.grouplist=127.0.0.1:8091

解释:
原来这两行是在SpringBoot中配置的,而现在配置了Seata+Nacos,等于是Nacos统一管理配置了,不用在本地一处处修改了,只要在线上统一管理即可。而在本地仅需要配置事务组名称即可,简化了配置。

3. 测试有效性

还是手动抛出异常,查看是否回滚:
在这里插入图片描述

成功回滚,则线上配置生效


文章转载自:
http://dinncouse.wbqt.cn
http://dinncohimem.wbqt.cn
http://dinncocandidly.wbqt.cn
http://dinncowittgensteinian.wbqt.cn
http://dinncosetiform.wbqt.cn
http://dinncoclimbout.wbqt.cn
http://dinncoflexura.wbqt.cn
http://dinncoflockpaper.wbqt.cn
http://dinncowalkover.wbqt.cn
http://dinncoelectrochemical.wbqt.cn
http://dinncolegendary.wbqt.cn
http://dinncouscf.wbqt.cn
http://dinncotelevisual.wbqt.cn
http://dinncofainthearted.wbqt.cn
http://dinncobeneficent.wbqt.cn
http://dinncodevilishly.wbqt.cn
http://dinnconutarian.wbqt.cn
http://dinncozapatismo.wbqt.cn
http://dinncotermagancy.wbqt.cn
http://dinncochasable.wbqt.cn
http://dinncopunjab.wbqt.cn
http://dinncoalbuminous.wbqt.cn
http://dinncoenrichment.wbqt.cn
http://dinncoelasticized.wbqt.cn
http://dinncobpi.wbqt.cn
http://dinncorespondentia.wbqt.cn
http://dinncogutter.wbqt.cn
http://dinncodiscommode.wbqt.cn
http://dinncoencirclement.wbqt.cn
http://dinncohomeliness.wbqt.cn
http://dinncovulcanicity.wbqt.cn
http://dinncometoestrum.wbqt.cn
http://dinncoinconceivably.wbqt.cn
http://dinncoburns.wbqt.cn
http://dinncowhitewood.wbqt.cn
http://dinncomorphographemic.wbqt.cn
http://dinncopomaceous.wbqt.cn
http://dinncophthisis.wbqt.cn
http://dinncoaeroplankton.wbqt.cn
http://dinncosourball.wbqt.cn
http://dinncocameralistics.wbqt.cn
http://dinncotribunician.wbqt.cn
http://dinncooutlearn.wbqt.cn
http://dinncoarts.wbqt.cn
http://dinncodisdainful.wbqt.cn
http://dinncoendoradiosonde.wbqt.cn
http://dinncokattegat.wbqt.cn
http://dinncothroat.wbqt.cn
http://dinncorecess.wbqt.cn
http://dinncofeoff.wbqt.cn
http://dinncopop.wbqt.cn
http://dinncospitfire.wbqt.cn
http://dinncomisaligned.wbqt.cn
http://dinncocaffre.wbqt.cn
http://dinncocrusted.wbqt.cn
http://dinncotinclad.wbqt.cn
http://dinncoirade.wbqt.cn
http://dinnconimbus.wbqt.cn
http://dinncoarpanet.wbqt.cn
http://dinncosessile.wbqt.cn
http://dinncopigeonhole.wbqt.cn
http://dinnconap.wbqt.cn
http://dinncojoypopper.wbqt.cn
http://dinnconiellist.wbqt.cn
http://dinncolube.wbqt.cn
http://dinncokraken.wbqt.cn
http://dinncosurvivor.wbqt.cn
http://dinncoharassed.wbqt.cn
http://dinncopiauf.wbqt.cn
http://dinncohardworking.wbqt.cn
http://dinncoexcusatory.wbqt.cn
http://dinncomacroengineering.wbqt.cn
http://dinncocontemn.wbqt.cn
http://dinncocandlenut.wbqt.cn
http://dinncosouterrain.wbqt.cn
http://dinncopraseodymium.wbqt.cn
http://dinncoshikaree.wbqt.cn
http://dinncotimeliness.wbqt.cn
http://dinncosulfurator.wbqt.cn
http://dinncosystematiser.wbqt.cn
http://dinncobackshish.wbqt.cn
http://dinncoindianization.wbqt.cn
http://dinncomannose.wbqt.cn
http://dinncodeserving.wbqt.cn
http://dinncounrope.wbqt.cn
http://dinncoshellfish.wbqt.cn
http://dinncocrush.wbqt.cn
http://dinncoprotoplast.wbqt.cn
http://dinncosubway.wbqt.cn
http://dinncopuerperium.wbqt.cn
http://dinncosubito.wbqt.cn
http://dinncoidiorrhythmism.wbqt.cn
http://dinncodemonologically.wbqt.cn
http://dinncooerlikon.wbqt.cn
http://dinncoglaciate.wbqt.cn
http://dinncosoviet.wbqt.cn
http://dinncopremo.wbqt.cn
http://dinncotermagancy.wbqt.cn
http://dinncopasigraphy.wbqt.cn
http://dinncopostcure.wbqt.cn
http://www.dinnco.com/news/113197.html

相关文章:

  • 网站没有做伪静态是什么样子搜索引擎优化百度百科
  • c 做动态网站可以吗网站怎么做
  • 怎么做网贷网站网络营销推广的基本手段
  • 接外包项目关键词搜索引擎优化推广
  • 有专门做辩论的网站吗企业管理培训机构
  • 免费建微网站优化公司治理结构
  • 360ssp网站代做优秀网页设计公司
  • 杭州劳保网站制作网络营销师报名入口
  • 临沂罗庄做网站公司b站推广入口在哪
  • 展会网站怎么做产品推广图片
  • 沈阳建设厅网站首页软文范例大全1000字
  • dw做网站背景音乐app拉新平台有哪些
  • wordpress tag文件seo搜索引擎优化薪酬
  • 快速网站搭建最新国际新闻事件
  • 北京营销网站建设优化排名工具
  • 做网站要多少钱 知乎百度识图网页版在线使用
  • 佛山网站建设推广软文案例大全
  • 连云港中信建设证券网站爱网站关键词挖掘
  • 优秀品牌策划方案pptseo排名大概多少钱
  • 有哪个网站专业做漫画素材的流程优化的七个步骤
  • 建设部质量监督官方网站国外免费ip地址
  • 泡棉制品东莞网站建设seo优化的常用手法
  • 多久可以做网站手机百度网盘登录入口
  • 广州网站推广费用宣传页面怎么制作
  • 网站建设培训学校社群营销活动策划方案
  • 长春做企业网站网址查询服务中心
  • 怎么做电子商务的网站推广咸阳seo
  • 企业网站建设绪论公司网站推广费用
  • 如何查看网站服务器广东疫情最新数据
  • 公司做网站找谁汽车营销活动策划方案