SpringCloud Alibaba Seata2.0基礎入門與安裝

官網地址:https://seata.apache.org/zh-cn/

GitHub下載地址:https://github.com/apache/incubator-seata/releases

本文這里下載的是seata2.0.0版本。

【1】概述

① Seata是什么

Simple Extensible Autonomous Transaction Architecture,簡單可擴展自治事務框架。

單體應用被拆分成微服務應用,原來的三個模塊被拆分成三個獨立的應用,分別使用三個獨立的數據源。業務操作需要調用三個服務來完成。此時每個服務內部的數據一致性由本地事務來保證,但是全局的數據一致性問題沒法保證。

在這里插入圖片描述

一次業務操作需要跨多個數據源或需要跨多個系統進行遠程調用,就會產生分布式事務問題。Seata是一款開源的分布式事務解決方案,致力于在微服務架構下提供高性能和簡單易用的分布式事務服務。

Seata 是一款開源的分布式事務解決方案,致力于提供高性能和簡單易用的分布式事務服務。Seata 將為用戶提供了 AT、TCC、SAGA 和 XA 事務模式,為用戶打造一站式的分布式解決方案。

在這里插入圖片描述

Seata 雖然是保證數據一致性的組件,但對于 ORM 框架并沒有特殊的要求,像主流的Mybatis,Mybatis-Plus,Spring Data JPA, Hibernate等都支持。這是因為ORM框架位于JDBC結構的上層,而 Seata 的 AT,XA 事務模式是對 JDBC 標準接口操作的攔截和增強。


Seata術語

TC (Transaction Coordinator) - 事務協調者

維護全局和分支事務的狀態,驅動全局事務提交或回滾。

TM (Transaction Manager) - 事務管理器

定義全局事務的范圍:開始全局事務、提交或回滾全局事務。

標注全局@GlobalTransactional啟動入口動作的微服務模塊(比如訂單模塊),它是事務的發起者,負責定義全局事務的范圍,并根據?TC 維護的全局事務和分支事務狀態,做出開始事務、提交事務、回滾事務的決議

RM (Resource Manager) - 資源管理器

管理分支事務處理的資源,與TC交談以注冊分支事務和報告分支事務的狀態,并驅動分支事務提交或回滾。

Seata處理過程

三個組件相互協作,TC以Seata 服務器(Server)形式獨立部署,TM和RM則是以Seata Client的形式集成在微服務中運行,

  1. TM 向 TC 申請開啟一個全局事務,全局事務創建成功并生成一個全局唯一的 XID;
  2. XID 在微服務調用鏈路的上下文中傳播;
  3. RM 向 TC 注冊分支事務,將其納入 XID 對應全局事務的管轄;
  4. TM 向 TC 發起針對 XID 的全局提交或回滾決議;
  5. TC 調度 XID 下管轄的全部分支事務完成提交或回滾請求。

在這里插入圖片描述

【2】Windows下安裝Seata

Seata分TC、TM和RM三個角色,TC(Server端)為單獨服務端部署,TM和RM(Client端)由業務系統集成。

從官網或者GitHub下載seata-server-2.0.0版本。

① 創建數據庫表

創建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);

在這里插入圖片描述

② 修改application.yml文件

如下圖所示conf下提供了application.example,我們可以參考其修改application.yml文件。

在這里插入圖片描述

這里config、registry采用了Nacos,store采用db,MySQL為8.0版本。

#  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: ${log.home:${user.home}/logs/seata}console:user:username: seatapassword: seata
seata:config:# support: nacos, consul, apollo, zk, etcd3type: nacosnacos:server-addr: 127.0.0.1:8848namespace:group: 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:cluster: defaultusername: nacospassword: nacoscontext-path:##if use MSE Nacos with auth, mutex with username/password attribute#access-key:#secret-key:store:# support: file 、 db 、 redis 、 raftmode: dbdb:datasource: druiddb-type: mysqldriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/seata?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=trueuser: mysqlpassword: mysqlmin-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,/metadata/v1/**

③ 啟動

運行bin目錄下的seata-server.bat即可:
在這里插入圖片描述

查看Nacos服務界面:
在這里插入圖片描述

訪問seata控制臺,http://localhost:7091/,默認賬號密碼均為seata。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37081.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37081.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37081.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ 設計模式之訪問者模式

C 設計模式之訪問者模式 簡介 1、訪問者模式 (Visitor)是一種行為型設計模式,它表示一個作用于某對象結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。 使用該模式可以在不修改已有程序結構的前提…

vue3 全局引入 onMounted, reactive, ref 的插件全局引入

webpack 的引入 npm install -D unplugin-auto-import const AutoImport require(unplugin-auto-import/webpack).default;configureWebpack: {devtool: source-map,module: {rules: [{test: /\.mjs$/,include: /node_modules/,type: javascript/auto}],}, plugins: [Aut…

Java對象創建過程

在日常開發中,我們常常需要創建對象,那么通過new關鍵字創建對象的執行中涉及到哪些流程呢?本文主要圍繞這個問題來展開。 類的加載 創建對象時我們常常使用new關鍵字。如下 ObjectA o new ObjectA();對虛擬機來講首先需要判斷ObjectA類的…

Java代碼質量管理與持續集成

Java代碼質量管理與持續集成 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 引言 在當今軟件開發的環境中,高質量的代碼和持續集成是保證軟件項目…

# Sharding-JDBC從入門到精通(4)- Sharding-JDBC 入門程序幾種配置方式

Sharding-JDBC從入門到精通(4)- Sharding-JDBC 入門程序幾種配置方式 一、Sharding-JDBC 入門程序(水平分表)-使用 application.yml 配置文件的 方式 1、打開 idea 創建 artifactId 名為 dbsharding 的 maven 父工程。 --> i…

python sklearn機械學習模型-回歸

🌈所屬專欄:【機械學習】?作者主頁: Mr.Zwq??個人簡介:一個正在努力學技術的Python領域創作者,擅長爬蟲,逆向,全棧方向,專注基礎和實戰分享,歡迎咨詢! 您…

redis實戰-添加商戶緩存

為什么要使用緩存 言簡意賅:速度快,好用緩存數據存儲于代碼中,而代碼運行在內存中,內存的讀寫性能遠高于磁盤,緩存可以大大降低用戶訪問并發量帶來的服務器讀寫壓力實際開發中,企業的數據量,少…

找不到mfc100.dll文件怎么辦?推薦這7個解決方法快速解決mfc100.dll丟失問題

使用電腦中,會遇到各種各樣的問題,比如找不到mfc100.dll,或mfc100.dll丟失導致軟件程序無法繼續運行,就是日常中比較常見的問題之一,今天我教大家遇到這個mfc100.dll丟失問題時候,要怎么解決,以…

【List集合排序】

List集合排序Demo import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor;import java.util.*;/*** list order demo*/ public class ListOrderDemo {public static void main(String[] args) {List<String> lis…

以太網幀格式是如何識別有效負載類型的

注&#xff1a;機翻&#xff0c;未校對。 識別以太網幀有效負載 Identifying Ethernet Frame Payloads Ethernet frames contain payload data encapsulated within header and trailer fields used to deliver packets over Layer 2 networks. This article provides an ov…

套接字通信類的封裝

在掌握了基于TCP的套接字通信流程之后&#xff0c;為了方便使用&#xff0c;提高編碼效率&#xff0c;可以對通信操作進行封裝&#xff0c;本著有淺入深的原則&#xff0c;先基于C語言進行面向過程的函數封裝&#xff0c;然后再基于C進行面向對象的類封裝。 1. 基于C語言的封裝…

Linux基礎篇——學習Linux基本工具安裝教程視頻鏈接

本篇文章就是記錄一下學習Linux需要用到的基本工具的視頻教程鏈接&#xff0c;方便以后查看 VMware15.5安裝 安裝視頻教程&#xff1a;VMware15.5安裝教程 centos7.6安裝&#xff08;這個視頻教程真的很nice&#xff09; 視頻教程&#xff1a;centos7.6 虛擬機克隆、快照、…

ansible 模塊擴展

uri模塊 在Ansible中&#xff0c;uri模塊是一個用于發送HTTP、HTTPS、FTP等請求的模塊&#xff0c;可以用于獲取網頁內容、下載文件、上傳文件等。本質上&#xff0c;它是一個HTTP客戶端模塊。 使用uri模塊&#xff0c;需要指定一些參數來定義HTTP請求。下面是一些uri模塊的常…

學習平臺推薦_菜鳥教程官網

網址&#xff1a; 菜鳥教程 - 學的不僅是技術&#xff0c;更是夢想&#xff01;菜鳥教程(www.runoob.com)提供了編程的基礎技術教程, 介紹了HTML、CSS、Javascript、Python&#xff0c;Java&#xff0c;Ruby&#xff0c;C&#xff0c;PHP , MySQL等各種編程語言的基礎知識。 同…

Nginx-2

一、高級配置 1.1網頁狀態頁 基于nginx 模塊 ngx_http_stub_status_module 實現&#xff0c;在編譯安裝nginx的時候需要添加編譯參數 --with-http_stub_status_module&#xff0c;否則配置完成之后監測會是提示語法錯誤注意: 狀態頁顯示的是整個服務器的狀態,而非虛擬主機的狀…

opencv實現surface_matching記錄

1 說明 使用的cv版本為4.7.0 , surface_matching功能是附加在contrib中的,并未直接包含在opencv 4.7.0中,因此編譯的時候需要考慮contrib。 VS版本為2022, CMake版本為3.30-rc4. 2 編譯opencv(含contrib) 參見: Win10 下編譯 OpenCV 4.7.0詳細全過程,包含xfeatures2…

Open3D (C++) 點云邊界提取

邊界提取 一、算法原理1、詳細流程2、主要函數3、參考文獻二、代碼實現三、結果展示四、注意事項本文由CSDN點云俠原創,原文鏈接。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的爬蟲。 一、算法原理 1、詳細流程 該算法完全復刻自PCL。 2、主要函數 /// \…

算法入門(上)

什么是算法&#xff1f; 算法&#xff08;Algorithm&#xff09;是解決特定問題求解步驟的描述&#xff0c;在計算機中表現為指令的有限序列&#xff0c;并且每條指令表示一個或多個操作。 給定一個問題&#xff0c;能夠解決這個問題的算法是有很多種的。算式中的問題是千奇百怪…

C++為什么將 0.1f 更改為 0 性能會降低 10 倍

一、浮點數與整數的表示差異 在計算機內部&#xff0c;浮點數和整數的表示方式截然不同。浮點數遵循IEEE 754標準&#xff0c;通過符號位、指數位和尾數位來存儲和表示數值&#xff0c;而整數則是直接的二進制表示。這種表示上的差異導致了它們在內存占用、處理速度以及精度上…

Debian/Ubuntu Linux安裝OBS

先決條件 建議使用 xserver-xorg 1.18.4 或更新版本&#xff0c;以避免 OBS 中某些功能&#xff08;例如全屏投影儀&#xff09;出現潛在的性能問題。在 Linux 上使用 OBS Studio 需要 OpenGL 3.3&#xff08;或更高版本&#xff09;支持。在終端中輸入以下內容來檢查系統支持…