Spring Cloud Alibaba-(5)Seata【分布式事务】

Spring Cloud Alibaba-(1)搭建项目环境

Spring Cloud Alibaba-(2)Nacos【服务注册与发现、配置管理】

Spring Cloud Alibaba-(3)OpenFeign【服务调用】

Spring Cloud Alibaba-(4)Sentinel【流控和降级】

Spring Cloud Alibaba-(5)Seata【分布式事务】

【已解决】使用Seata分布式事务,服务端报错 could not find any implementation for class

1.Seata 官网(https://seata.apache.org/zh-cn/)

2.TC(事务协调者)、TM(事务管理器)、RM(资源管理器)

31c65c9f2397418e98c9e9027dd99626.png

3.Seata 使用2PC(两阶段提交协议)

3.1 Prepare(预处理阶段):事务协调者给参与者发送Prepare请求,参与者响应。

3.2 Commit(提交阶段):如果所有参与者都响应Yes,则协调者发送Commit请求,让参与者提交事务;否则,协调者发送RollBack请求,让参与者回滚事务。

3.3 优点:

一致性保证了分布式系统中所有参与者的状态一致性
原子性确保事务要么全部成功,要么全部失败

3.4 不足:

性能开销2PC 需要在提交之前进行多次网络通信,增加了事务处理的时间
单点故障协调者是单点故障,如果协调者在提交阶段发生故障,可能导致事务处于不确定状态
同步阻塞参与者在准备阶段需要锁定资源,直到事务完成,这可能导致资源长时间锁定,影响系统性能

4. AT模式(Auto Transaction)--基于2PC的优化方案

4.1 预处理阶段(Prepare):

在这个阶段,事务中的所有更新操作会被记录为“逆向操作”(Undo Log)和“正向操作”(Redo Log)。

“逆向操作”记录了如何撤销这些更新,以便在事务回滚时使用。

“正向操作”记录了如何完成这些更新,以便在事务提交时使用。

这些操作记录会持久化到本地数据库中,确保即使在系统崩溃的情况下也能恢复。

4.2 提交阶段(Commit):

如果预处理成功,则协调者向所有参与者发送提交指令,参与者根据“正向操作”记录提交事务。

否则,协调者将向所有参与者发送回滚指令,参与者根据“逆向操作”记录回滚事务。

5.下载(Seata-Server版本历史 | Apache Seata)

166fb3d70fe74951bce65b48c729842c.png

6.db + nacos 高可用模式启动 Seata 服务端

6.1 创建seata_server数据库,导入mysql.sql

8ab221b6b52e4d7097bb8b656e34767b.png

6.2 修改seata配置文件,使用 db+nacos 高可用模式(将application.example.yml 关于nacos、store.db配置复制过来)

98482c9886b946d28a2eb785d805e0d2.png

#  Copyright 1999-2019 Seata.io Group.
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.server:port: 7091spring:application:name: seata-serverlogging:config: classpath:logback-spring.xmlfile:path: ${user.home}/logs/seataextend:logstash-appender:destination: 127.0.0.1:4560kafka-appender:bootstrap-servers: 127.0.0.1:9092topic: logback_to_logstashconsole:user:username: seatapassword: seata
seata:config:# support: nacos 、 consul 、 apollo 、 zk  、 etcd3type: nacosnacos:server-addr: 127.0.0.1:8848namespace:group: SEATA_GROUPusername:password:context-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:cluster: defaultusername:password:context-path:##if use MSE Nacos with auth, mutex with username/password attribute#access-key:#secret-key:store:# support: file 、 db 、 redis 、 raftmode: dbsession:mode: dblock:mode: dbdb:datasource: druiddb-type: mysqldriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/seata_server?rewriteBatchedStatements=true&useSSL=falseuser: ***password: ***min-conn: 10max-conn: 100global-table: global_tablebranch-table: branch_tablelock-table: lock_tabledistributed-lock-table: distributed_lockquery-limit: 1000max-wait: 5000
#  server:
#    service-port: 8091 #If not configured, the default is '${server.port} + 1000'security:secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017tokenValidityInMilliseconds: 1800000ignore:urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.jpeg,/**/*.ico,/api/v1/auth/login

6.3 修改配置中心配置

0f584a4164684203a3c836f6372ac10d.png

66000d1c67904106b0edcc41e5b26bb5.png

e6101d2092fb476785881892b2824f6b.png

6.4 将配置注册到Nacos

32000dedbdf142f69030037ac3bb1fff.png

6.5 双击启动 Seata 服务

f4cc3f9b8785406995861b9fe7c6bf23.png

6.6 访问 http://localhost:7091/

76d43a8d56ad4369af2cb185824e4175.png

7.项目搭建 Seata 客户端

7.1 涉及Seata分布式事务的服务(订单服务、产品服务),添加Maven依赖

<!-- seata 分布式事务 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>

7.2 涉及Seata分布式事务的服务(订单服务、产品服务),数据库都需要添加undo_log表

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;

7.3 涉及Seata分布式事务的服务(订单服务、产品服务),bootstrap.yml 配置 Seata

7.3.1 订单服务 bootstrap.yml 配置 Seata

server:port: 8000spring:profiles:active: publicapplication:name: order-servicedatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/springcloud2024username: rootpassword: 123456cloud:nacos:discovery:server-addr: http://localhost:8848config:server-addr: http://localhost:8848file-extension: yamlnamespace: publicshared-configs:- data-id: order-service-default.yamlrefresh: true- data-id: order-service-default-test.yamlrefresh: trueopenfeign:httpclient:# 连接超时connection-timeout: 5000sentinel:transport:dashboard: http://localhost:8858datasource:flow-rule:nacos:server-addr: http://localhost:8848data-id: order-service-flow-rulerule-type: flow# Openfeign 整合 sentinel
feign:sentinel:enabled: trueseata:registry:type: nacosnacos:server-addr: http://localhost:8848application: seata-servergroup: SEATA_GROUPconfig:type: nacosnacos:server-addr: http://localhost:8848group: SEATA_GROUPtx-service-group: default_tx_group

7.3.2 产品服务 bootstrap.yml 配置 Seata

server:port: 8400spring:application:name: product-servicedatasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/springcloud2024username: rootpassword: 123456cloud:nacos:discovery:server-addr: http://localhost:8848config:server-addr: http://localhost:8848seata:registry:type: nacosnacos:server-addr: http://localhost:8848application: seata-servergroup: SEATA_GROUPconfig:type: nacosnacos:server-addr: http://localhost:8848group: SEATA_GROUPtx-service-group: default_tx_group

7.4 业务方法加 @GlobalTransactional 开启分布式任务

cda3415837d94b18b1c5729d8aef758b.png

7.5 订单服务调用下单接口。下单失败,订单服务没有新增订单,产品服务没有扣减库存,实现分布式任务。

98fa434b055141d487fc96e52f17ff32.png

af9ce66e1b7844e991f7486bdf19fe95.png

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

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

相关文章

P1516 青蛙的约会(exgcd以及相关结论)

非常好的题&#xff0c;适合入门拓展欧几里得算法以及相关结论。 结论 ax by gcd(a,b) gcd(b,a%b) 由此递归求解即可。 int exgcd(int a,int b,int &x,int &y){// 求解 ax by gcd(a,b)if(!b){x 1,y 0;return a;}int g exgcd(b,a%b,x,y);int temp x;x y…

NLP 序列标注任务核心梳理

句向量标注 用 bert 生成句向量用 lstm 或 bert 承接 bert 的输出&#xff0c;保证模型可以学习到内容的连续性。此时 lstm 输入形状为&#xff1a; pooled_output.unsqueeze(0) (1, num_sentence, vector_size) 应用场景 词性标注句法分析 文本加标点 相当于粗粒度的分词任…

8590 队列的应用——银行客户平均等待时间

### 思路 1. **初始化队列**&#xff1a;使用InitQueue函数初始化一个队列&#xff0c;用于存储客户的到达时刻和办理时间。 2. **读取输入**&#xff1a;读取客户总人数和每个客户的到达时刻及办理时间。 3. **模拟业务办理**&#xff1a; - 维护一个当前时间变量currentTi…

【路径规划】 红嘴蓝鹊优化器:一种用于2D/3D无人机路径规划和工程设计问题的新型元启发式算法

摘要 本文提出了一种新型元启发式算法——红嘴蓝鹊优化器&#xff08;RBMO&#xff09;&#xff0c;用于解决2D和3D无人机路径规划以及复杂工程设计问题。RBMO灵感来源于红嘴蓝鹊的群体合作行为&#xff0c;包括搜索、追逐、捕猎和食物储藏。该算法通过模拟这些行为&#xff0…

模板:JDBC 连接数据库并实现 CRUD

目录 前期准备&#xff1a; 1. 连接数据库 1.1 第一种 1.2 第二种 2. 增加 3. 修改 4. 删除 5. 查询 5.1 查询某个记录 5.2 查询单列数据 使用时&#xff0c;直接复制再修改一些数据即可&#xff1b; 声明&#xff1a;在对文件/变量命名时&#xff0c;没有做到见名知…

CompletableFuture如何优雅处理异步任务超时!妙就完了

文章目录 1. 主要解决哪些业务痛点&#xff1f;2. 流程分析3. 上代码4. 总结一波 1. 主要解决哪些业务痛点&#xff1f; 小强最近一直没打黑神话悟空&#xff0c;闷闷不乐的&#xff0c;我问咋回事&#xff0c;最近有啥烦心事么? 他不爽的跟我说了当他CompletableFuture进行…

css基础知识笔记

一言&#xff1a; “放任误解就是撒谎。” 文章目录 前言文章有误敬请斧正 不胜感恩&#xff01;CSS基础教程0.文本样式基础1. CSS选择器2. CSS布局技巧3. 响应式设计4. Emmet语法 总结 前言 写在开始&#xff1a; 今天来看一眼CSS基础知识。 好几天没更新了 先更一篇 文章有…

华为OD机试 - 需要打开多少监控器(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

2024年最新网络协议分析器Wireshark抓包详细教程(更新中)

网络协议分析器 Wireshark 安装 Wireshark 是一个功能强大的网络协议分析器&#xff0c;早期叫作 Ethereal。它主要用于捕获网络数据包&#xff0c;并对这些数据包进行详细的解析和分析&#xff0c;帮助用户深入了解网络通信的细节。它支持多种网络协议&#xff0c;并提供详细…

银河麒麟桌面操作系统如何添加WPS字体

银河麒麟桌面操作系统如何添加WPS字体 1、使用场景2、操作方法步骤一&#xff1a;下载字体文件步骤二&#xff1a;打开终端步骤三&#xff1a;进入字体文件所在目录步骤四&#xff1a;拷贝字体文件到WPS字体目录步骤五&#xff1a;更新字体缓存步骤六&#xff1a;重启WPS Offic…

uni-app-通过vue-cli命令行快速上手

环境安装 全局安装 vue-cli npm install -g vue/cli创建uni-app 使用正式版&#xff08;对应HBuilderX最新正式版&#xff09; vue create -p dcloudio/uni-preset-vue my-project使用alpha版&#xff08;对应HBuilderX最新alpha版&#xff09; vue create -p dcloudio/uni-p…

Linux常用命令;Linux常用软件;Linux权限

一&#xff0c;常用命令 是人向计算机发送指令的语言。 命令的格式&#xff1a; 命令 [选项] [参数] 1、ls 展示当前目录下文件的命令 1、-l 展示详细信息。还有另外一种写法&#xff1a;ll&#xff08;字母 LL 小写&#xff09; 2、-S 按照文件大小倒序展示 3、-t…

1952. 三除数

目录 一&#xff1a;题目&#xff1a; 二&#xff1a;代码&#xff1a; 三&#xff1a;结果&#xff1a; 一&#xff1a;题目&#xff1a; 给你一个整数 n 。如果 n 恰好有三个正除数 &#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在整数 k &a…

【软件测试】性能测试-概念篇

目录 &#x1f334;什么是性能测试 &#x1f333;常见性能测试指标 &#x1f6a9;并发数 &#x1f6a9;吞吐量 &#x1f6a9;吞吐量分类 &#x1f3c0;按照请求分类:TPS和QTS &#x1f3c0;按照网络数据包划分:KB &#x1f6a9;响应时间 &#x1f6a9;资源利用率 &am…

SpringBoot启动流程之运行时监听器

SpringBoot启动过程&#xff1a; 上一节我们讨论SpringApplication实例化的过程&#xff0c;也就是上图1-5步骤&#xff0c;本节我们讨论6-9的关键步骤&#xff0c;现在主要讲是run方法里面的过程 /*** 启动方法* param args* return*/public ConfigurableApplicationContext …

基于JAVA+SpringBoot+Vue的景区民宿预约系统

基于JAVASpringBootVue的景区民宿预约系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈…

Mamba所需的causal-conv1d 和mamba-ssm库在哪下载?

背景介绍 参照 Mamba [state-spaces/mamba: Mamba SSM architecture (github.com)] github中提到的环境安装[Installation 一栏] [Option] pip install causal-conv1d>1.4.0: an efficient implementation of a simple causal Conv1d layer used inside the Mamba block.…

浙版传媒思迈特软件大数据分析管理平台建设项目正式启动

近日&#xff0c;思迈特软件与出版发行及电商书城领域的领军企业——浙江出版传媒股份有限公司&#xff0c;正式启动大近日&#xff0c;思迈特软件与出版发行及电商书城领域的领军企业——浙江出版传媒股份有限公司&#xff0c;正式启动大数据分析管理平台建设项目。浙版传媒相…

华为HarmonyOS灵活高效的消息推送服务(Push Kit) - 2 开通推送服务与配置Client ID

在开通推送服务前&#xff0c;请先参考“应用开发准备”完成基本准备工作&#xff0c;再继续进行以下开发活动。 说明 从HarmonyOS NEXT Developer Beta2起&#xff0c;开发者无需配置公钥指纹和Client ID。 操作步骤 登录AppGallery Connect网站&#xff0c;选择“我的项目…

UML图中部署图例题

答案&#xff1a;B 知识点&#xff1a; 组件图 一组构件之间的组织和依赖&#xff0c;专注于系统的静态实现视图 部署图 运行处理结点以及构件的配置&#xff0c;给出体系结构的静态视图 类图 一组对象&#xff0c;接口&#xff0c;协作和它们之间的关系 UML图中涉及到…