seata 的部署和集成

文章目錄

  • seata的部署和集成
  • 一、部署Seata的tc-server
    • 1.下載
    • 2.解壓
    • 3.修改配置
    • 4.在nacos添加配置
    • 5.創建數據庫表
    • 6.啟動TC服務
  • 二、微服務集成seata
    • 1.引入依賴
    • 2.修改配置文件
  • TODO
  • 三、TC服務的高可用和異地容災
    • 1.模擬異地容災的TC集群
    • 2.將事務組映射配置到nacos
    • 3.微服務讀取nacos配置

seata的部署和集成

一、部署Seata的tc-server

1.下載

鏈接:https://pan.baidu.com/s/1MsbbF0rseNy74r7lLPbpwQ
提取碼:hzan

首先我們要下載seata-server包,地址在http😕/seata.io/zh-cn/blog/download.html

當然,課前資料也準備好了:

在這里插入圖片描述

2.解壓

在非中文目錄解壓縮這個zip包,其目錄結構如下:

在這里插入圖片描述

3.修改配置

修改conf目錄下的registry.conf文件:

在這里插入圖片描述

內容如下:修改+大量刪除

registry {# tc服務的注冊中心類型,這里選擇nacos,也可以是eureka、zookeeper等type = "nacos"nacos {# seata tc 服務注冊到 nacos的服務名稱,可以自定義application = "seata-tc-server"serverAddr = "192.168.59.1:8848"group = "DEFAULT_GROUP"namespace = ""cluster = "SH"username = "nacos"password = "nacos"}
}config {# 讀取tc服務端的配置文件的方式,這里是從nacos配置中心讀取,這樣如果tc是集群,可以共享配置type = "nacos"# 配置nacos地址等信息nacos {serverAddr = "172.0.0.1:8848"namespace = ""group = "SEATA_GROUP"username = "nacos"password = "nacos"dataId = "seataServer.properties"}
}

注意:nacos地址默認127.0.0.1可以,都是本地IP,端口是8848沒錯就行
名稱換了下,中間加了一個-tc- 待會兒nacos控制臺顯示的就是這個名稱

nacos組的名稱,直接到nacos控制臺查看
在這里插入圖片描述
注冊中心是nacos,配置文件也給中心去管理,方便集群下的共享

4.在nacos添加配置

特別注意,為了讓tc服務的集群可以共享配置,我們選擇了nacos作為統一配置中心。因此服務端配置文件seataServer.properties文件需要在nacos中配好。

dataId = “seataServer.properties” 上面配置文件配置的一個文件名稱

格式如下:

在這里插入圖片描述

在這里插入圖片描述

配置內容如下:

# 數據存儲方式,db代表數據庫  (這里的數據指的是:分支事務,全局事務的信息)
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=1234
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
# 事務、日志等配置
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000# 客戶端與服務端傳輸方式
transport.serialization=seata
transport.compressor=none
# 關閉metrics功能,提高性能
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

其中的數據庫地址、用戶名、密碼都需要修改成你自己的數據庫信息。

在這里插入圖片描述

5.創建數據庫表

特別注意:tc服務在管理分布式事務時,需要記錄事務相關數據到數據庫中,你需要提前創建好這些表。

新建一個名為seata的數據庫,運行課前資料提供的sql文件:

上面nacos新增的配置項seataServer.properties,里面的數據庫地址,數據庫名稱就是 seata

先創建數據庫:

create database seata;
use seata;

在這里插入圖片描述

再執行sql文件

在這里插入圖片描述

這些表主要記錄全局事務、分支事務、全局鎖信息:


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- 分支事務表
-- ----------------------------
DROP TABLE IF EXISTS `branch_table`;
CREATE TABLE `branch_table`  (`branch_id` bigint(20) NOT NULL,`xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`transaction_id` bigint(20) NULL DEFAULT NULL,`resource_group_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`resource_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`branch_type` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`status` tinyint(4) NULL DEFAULT NULL,`client_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`gmt_create` datetime(6) NULL DEFAULT NULL,`gmt_modified` datetime(6) NULL DEFAULT NULL,PRIMARY KEY (`branch_id`) USING BTREE,INDEX `idx_xid`(`xid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- 全局事務表
-- ----------------------------
DROP TABLE IF EXISTS `global_table`;
CREATE TABLE `global_table`  (`xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`transaction_id` bigint(20) NULL DEFAULT NULL,`status` tinyint(4) NOT NULL,`application_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`transaction_service_group` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`transaction_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`timeout` int(11) NULL DEFAULT NULL,`begin_time` bigint(20) NULL DEFAULT NULL,`application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`gmt_create` datetime NULL DEFAULT NULL,`gmt_modified` datetime NULL DEFAULT NULL,PRIMARY KEY (`xid`) USING BTREE,INDEX `idx_gmt_modified_status`(`gmt_modified`, `status`) USING BTREE,INDEX `idx_transaction_id`(`transaction_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;SET FOREIGN_KEY_CHECKS = 1;

在這里插入圖片描述

6.啟動TC服務

進入bin目錄,運行其中的seata-server.bat即可:

在這里插入圖片描述
在這里插入圖片描述

啟動成功后,seata-server應該已經注冊到nacos注冊中心了。

打開瀏覽器,訪問nacos地址:http://192.168.59.1:8848/nacos/index.html,然后進入服務列表頁面,可以看到seata-tc-server的信息:

啟動nacos的黑窗口有nacos控制臺地址

在這里插入圖片描述

點擊詳情查看詳細信息:
在這里插入圖片描述
在這里插入圖片描述

二、微服務集成seata

注意:參與全局事務的每個微服務都要做下面這幾步
下面3個微服務都要做下面兩步
在這里插入圖片描述

配置好了,各個微服務集成seata,將來各個微服務之間的分布式事務就有中心化機構,能夠自動管理了

1.引入依賴

首先,我們需要在微服務中引入seata依賴:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId><exclusions><!--版本較低,1.3.0,因此排除--><exclusion><artifactId>seata-spring-boot-starter</artifactId><groupId>io.seata</groupId></exclusion></exclusions>
</dependency>
<!--seata starter 采用1.4.2版本-->
<dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>${seata.version}</version>
</dependency>

${seata.version} 是父工程的pom.xml里配置的變量

2.修改配置文件

需要修改application.yml文件,添加一些配置:

seata:registry: # TC服務注冊中心的配置,微服務根據這些信息去注冊中心獲取tc服務地址# 參考tc服務自己的registry.conf中的配置type: nacosnacos: # tcserver-addr: 127.0.0.1:8848 # 127.0.0.1就是localhostnamespace: ""group: DEFAULT_GROUPapplication: seata-tc-server # tc服務在nacos中的服務名稱cluster: SHtx-service-group: seata-demo # 事務組,根據這個獲取tc服務的cluster名稱service:vgroup-mapping: # 事務組與TC服務cluster的映射關系seata-demo: SH

配完后nacos配置了兩份,seata一份,springCloud一份,這是因為seata框架目前做得還不好,沒有做好和springCloud的集成關系,所以還得獨立再去配一次nacos
.
配置文件的配置除了集群名稱,cluster,其他完全按照TC的配置文件conf/registry.conf來配
在這里插入圖片描述


TC已經作為一個獨立的軟件, 以微服務的形式注冊到nacos注冊中心去了
現在TM、RM需要和TC進行交流,也就是讓他們找到TC微服務就行了。(配置好,讓他們找到,后面就不需要我們操心了)
那么,要找到一個微服務,得同時知道這四個信息
在這里插入圖片描述
仔細一看配置文件里都有

  1. namespace: “” 這里的空,就是默認配置public
  2. 這里集群的名稱配置也有點特別,因為有一個事務組的概念,后面詳細介紹,現在只需要知道訂單、商品、庫存3個微服務的3個分支事務都在一個事務組里被管理,即可。
    (事務組和集群有個映射關系,所以集群名稱SH在事務組下面配置的)
  • 四個配置圖示 (找到一個微服務必備的四個配置信息)
    在這里插入圖片描述

修改完成后重啟,若報錯

Error creating bean with name 'globalTransactionScanner' defined in class path resource [io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.class]: Bean instantiation via factory method failed; nested 

請切換到jdk8。不要用jdk17,很多類被棄用了


正常重啟后,seata黑窗口能看到服務的注冊信息,說明該微服務確實創建的RM和TM,并且確實都和TC中心連接上了

21:48:30.657  INFO --- [rverHandlerThread_1_1_500] i.s.c.r.processor.server.RegRmProcessor  : RM register success,message:RegisterRMRequest{resourceIds='jdbc:mysql:///seata_demo', applicationId='storage-service', transactionServiceGroup='seata-demo'},channel:[id: 0x01e2d561, L:/2.0.0.1:8091 - R:/2.0.0.1:51715],client version:1.4.2
21:49:29.798  INFO --- [ttyServerNIOWorker_1_2_40] i.s.c.r.processor.server.RegTmProcessor  : TM register success,message:RegisterTMRequest{applicationId='storage-service', transactionServiceGroup='seata-demo'},channel:[id: 0x98e48203, L:/2.0.0.1:8091 - R:/2.0.0.1:52226],client version:1.4.2

在這里插入圖片描述

同時重啟3個微服務,會看到3個RM和3個TM的注冊信息,TM注冊比較慢,請耐心等待
在這里插入圖片描述

TODO

三、TC服務的高可用和異地容災

1.模擬異地容災的TC集群

計劃啟動兩臺seata的tc服務節點:

節點名稱ip地址端口號集群名稱
seata127.0.0.18091SH
seata2127.0.0.18092HZ

之前我們已經啟動了一臺seata服務,端口是8091,集群名為SH。

現在,將seata目錄復制一份,起名為seata2

修改seata2/conf/registry.conf內容如下:

registry {# tc服務的注冊中心類,這里選擇nacos,也可以是eureka、zookeeper等type = "nacos"nacos {# seata tc 服務注冊到 nacos的服務名稱,可以自定義application = "seata-tc-server"serverAddr = "127.0.0.1:8848"group = "DEFAULT_GROUP"namespace = ""cluster = "HZ"username = "nacos"password = "nacos"}
}config {# 讀取tc服務端的配置文件的方式,這里是從nacos配置中心讀取,這樣如果tc是集群,可以共享配置type = "nacos"# 配置nacos地址等信息nacos {serverAddr = "127.0.0.1:8848"namespace = ""group = "SEATA_GROUP"username = "nacos"password = "nacos"dataId = "seataServer.properties"}
}

進入seata2/bin目錄,然后運行命令:

seata-server.bat -p 8092

打開nacos控制臺,查看服務列表:

在這里插入圖片描述

點進詳情查看:

在這里插入圖片描述

2.將事務組映射配置到nacos

接下來,我們需要將tx-service-group與cluster的映射關系都配置到nacos配置中心。

新建一個配置:

在這里插入圖片描述

配置的內容如下:

# 事務組映射關系
service.vgroupMapping.seata-demo=SHservice.enableDegrade=false
service.disableGlobalTransaction=false
# 與TC服務的通信配置
transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableClientBatchSendRequest=false
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
# RM配置
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=false
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
# TM配置
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000# undo日志配置
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
client.log.exceptionRate=100

3.微服務讀取nacos配置

接下來,需要修改每一個微服務的application.yml文件,讓微服務讀取nacos中的client.properties文件:

seata:config:type: nacosnacos:server-addr: 127.0.0.1:8848username: nacospassword: nacosgroup: SEATA_GROUPdata-id: client.properties

重啟微服務,現在微服務到底是連接tc的SH集群,還是tc的HZ集群,都統一由nacos的client.properties來決定了。

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

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

相關文章

中期國際:MT4數據挖掘與分析方法:以數據為導向,制定有效的交易策略

在金融市場中&#xff0c;制定有效的交易策略是成功交易的關鍵。而要制定一份可靠的交易策略&#xff0c;數據挖掘與分析方法是不可或缺的工具。本文將介紹如何以數據為導向&#xff0c;利用MT4進行數據挖掘與分析&#xff0c;從而制定有效的交易策略。 首先&#xff0c;我們需…

操作系統搭建相關知識

文章目錄 系統篇netstat命令systemctl命令Systemd系統資源分類&#xff08;12類&#xff09; 網絡篇ifconfig命令操作系統配置動態IP腳本dhcp服務的安裝與配置防火墻相關知識 操作系統常用配置文件 系統篇 netstat命令 netstat指路 systemctl命令 常用于重啟系統的每個服務…

注解@DependsOn

注解 DependsOn 1. 注解由來&#xff1a; DependsOn 注解是 Spring 框架提供的一種注解&#xff0c;用于指定 Bean 之間的依賴關系。通過在 Bean 上添加 DependsOn 注解&#xff0c;可以確保在初始化時先初始化指定的依賴 Bean&#xff0c;從而滿足對象之間的正確順序。 2. 注…

沒有使用springboot 單獨使用spring-boot-starter-logging

如果您不使用Spring Boot框架&#xff0c;但想單獨使用Spring Boot Starter Logging&#xff0c;您可以按照以下步驟進行&#xff1a; 1. 添加Maven依賴&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boo…

Kotlin手寫RxJava變換符

Kotlin手寫RxJava變換符 本文鏈接&#xff0c;點擊這里進入 1、核心點&#xff1a;中轉站存儲之前的數據 2、三行代碼實現RxJava 使用create、map、observer fun main() {// create構造出RxJavaCore存放&#xff0c;lambda執行完的結果create{"WCH"}.map{ // 擴展…

AI繪畫 stable diffusion Midjourney 官方GPT文檔 AIGC百科全書資料收集

教學AI繪畫 AIGC工具 SD教程 ###Redis面試題 單機Redis的qps大概是多少&#xff1f; 項目中用到了哪些Redis的數據類型&#xff1f;為什么這么用&#xff1f; Redis的key到了過期時間就被刪除了嗎&#xff1f;簡述下Redis的過期策略&#xff1f; Redis有哪幾種內存淘汰策略…

Jetpack Compose:探索聲明式UI開發的未來

Jetpack Compose&#xff1a;探索聲明式UI開發的未來 1. 引言 在移動應用開發領域&#xff0c;用戶界面&#xff08;UI&#xff09;開發一直是開發過程中的關鍵挑戰之一。傳統的UI開發方式往往涉及大量繁瑣的布局代碼、手動管理狀態和事件處理&#xff0c;不僅容易引發錯誤&a…

Google瀏覽器點擊鏈接打開新標簽頁

由于新安裝的谷歌瀏覽器點擊鏈接時默認在當前窗口打開非常不方便&#xff0c;這里提供一下解決思路 1、打開瀏覽器輸入任意內容&#xff0c;點擊右上角的設置 2、在彈出的選項欄中點擊See all Search settings 3、點擊Other settings&#xff0c;將指定選項打開即可

C++模板元編程(6)模板參數替換(Template argument substitution)

文章目錄 1、什么是模板參數替換2、實例3、模板參數替換規則 1、什么是模板參數替換 模板參數替換&#xff08;Template argument substitution&#xff09;&#xff1a;在函數模板實例化的過程中&#xff0c;模板參數會被替換為實際的參數類型或值。這個替換過程稱為模板參數…

C#__事件event的簡單使用:工具人下樓問題

// 工具人類 namespace DownStair {delegate void DownStairDelegate(); // 定義了一個下樓委托class ToolMan{public string Name { get; set; } // 聲明工具人的名字屬性// public DownStairDelegate downStairDelegate null; // 初始化委托downStair為空委托// 解決方案pu…

對接海康門禁設備-初始化SDK和登錄設備

對接海康門禁設備&#xff0c;初始化SDK /*** author czm* date 2023/2/15*/ public interface HCNetSDK extends Library {public static HCNetSDK getInstance(String sdkPath) { // sdkPath sdk 目錄路徑System.out.println("sdk_path " sdkPath);HCNetSDK …

gromacs教程練習1

gromacs能在win上運行&#xff0c;還是個開源的軟件&#xff0c;這都很值得入手學習 記錄下gromacs教程的練習情況&#xff1a; Lysozyme in water 水中的溶菌酶&#xff0c;嗯&#xff0c;估計就是把蛋白處理后放在顯試溶劑里跑MD這個模擬。 1、文件的準備&#xff1a; 1、…

Java jakarta.websocket.server.ServerContainer not available(已解決)

在SpringBoot做測試用例&#xff0c;遇到如下報錯 jakarta.websocket.server.ServerContainer not available 測試類的注解修改如下&#xff1a; SpringBootTest(webEnvironment SpringBootTest.WebEnvironment.RANDOM_PORT)

Python 數組操作指南:使用示例和方法解析

什么是 Python 數組? 數組是一種基本數據結構,也是大多數編程語言的重要組成部分。在 Python 中,它們是能夠同時存儲多個項目的容器。具體來說,它們是元素的有序集合,每個值都具有相同的數據類型。這是關于 Python 數組需要記住的最重要的事情 - 它們只能保存相同類型的多…

【STM32+ESP8266上云連載①】給ESP8266燒錄AT固件

文章目錄 一、給NodeMCU燒錄固件1.1硬件準備1.2軟件準備1.3AT固件下載1.4配置設置1.5開始燒錄 二、給ESP8266-01S燒錄固件2.1硬件準備2.2AT固件下載2.3連線2.4燒錄配置 三、給ESP-12E/F/S單片燒錄固件四、指令測試4.1HTTP測試4.2MQTT測試 我在使用ESP8266的時候遇到了一些問題&…

神經網絡基礎-神經網絡補充概念-57-多任務學習

概念 多任務學習&#xff08;Multi-Task Learning&#xff0c;MTL&#xff09;是一種機器學習方法&#xff0c;旨在同時學習多個相關任務&#xff0c;通過共享特征表示來提高模型的性能。在多任務學習中&#xff0c;不同任務之間可以是相關的&#xff0c;共享的&#xff0c;或…

OCR的發明人是誰?

OCR的發明背景可以追溯到早期計算機科學和圖像處理的研究。隨著計算機技術的不斷發展&#xff0c;人們開始探索如何將印刷體文字轉換為機器可讀的文本。 OCR&#xff08;Optical Character Recognition&#xff0c;光學字符識別&#xff09;的發明涉及多個人的貢獻&#xff0c…

思騰云計算

近年來&#xff0c;游戲行業發展迅猛&#xff0c;市場容量不斷擴大。從游戲產業發展來看&#xff0c;玩家對于游戲內容和體驗的需求不斷攀升。那如何在同質化的游戲市場&#xff0c;通過 AI 來提高游戲探索和交互的趣味度&#xff1f; 行業存在以下痛點&#xff1a; 1、游戲迭…

JVM中對象和GC Root之間的四種引用關系

1. 強引用 只有所有 GC Roots 對象都不通過【強引用】引用該對象&#xff0c;該對象才能被垃圾回收 由GC Root直接new出來的對象是強引用&#xff0c;只有當GC Root不再引用該對象的時候&#xff0c;才會被回收 例子&#xff1a; List<String> list new ArrayList<&…

vue2.0/vue3.0學習筆記——2022.08.16

vue2&#xff08;查漏補缺&#xff09; 一、vue基礎 內置指令&#xff08;查漏補缺&#xff09; 1、v-text 更新元素的textContent 2、v-html 更新元素的innerHtml 3、v-cloak 防止閃現&#xff0c;與css配合: [v-cloak] {dispaly: none} 4、v-once 在初次動態渲染厚&#x…