楠木軒

SpringCloud第十節:分散式事務管理Seata

由 尉遲長喜 釋出於 科技

在開始之前,先說兩句,首先這節記錄還是延續spingcloud系列的。還有最最重要的就是,關於Seata來講,最難的就是配置,所以在這邊給大家一個提醒,一定要耐住性子來學習Seata!

好的,話不多說,開整!

1、準備工作:

啟動nacos

2、配置下載1.3.0版本的seata,對seata進行解壓,然後進行seata的配置:

2.1、找到conf資料夾下面的file.conf,選擇儲存方式為db,在這邊先說下,seate是有獨立的資料庫的,而且除此之外還提供了一個數據表的指令碼要放到你專案對應的資料庫中;

首先先建立seata的資料庫,資料庫的表是官方提供的,但是在1.0版本之後就不提供了,大家一是可以去找老的版本,二是github中,三是官網中去找的。

2.2、找到conf資料夾下面的registry.conf,這個地方我們選擇的註冊方式是nacos,因為專案使用的是Alibaba的全家桶,當然最完美的就是註冊到nocas,當然這些就安照大家自己的意願進行選擇即可。

2.3 然後我們就可以先進行啟動seata,找到bin資料夾下面的seata-server.bat進行啟動:然後我們登陸nocas之後就可以看到seata被註冊進來了!

3、介紹一下我們的專案,是如何使用到seata的:

3.1、首先專案還是之前的專案,大家不熟悉,或者忘記的話,可以翻閱之前我的文章;

4、專案的邏輯寫好之後,就要對三個微服務分別進行yml檔案的配置了,步驟都是一樣的,我這邊記錄一個就可以了:

4.1、首先pom檔案中,先移除自帶的,然後重新引入我們自己的版本

4.2、然後新建這兩個檔案,這個在官網中可以找到,如果需要的話,可以留言,我這邊再提供一下:

然後修改file.conf:大家注意了,這個地方的一個坑,在1.0版本之前,vgroupMapping的寫法是vgroup-mapping!這是個坑!

然後修改registry.conf:

5、修改微服務的yml檔案中關於seata的配置內容,注意對應關係:大家也要這樣進行一個三者對應!

6、這個時候,配置的東西算是搞好了,可以鬆口氣了,大家一定要記住seata最難的就是配置!使用起來就是一個註解:在service的實現類中新增一個註解@GlobalTransactional:

7、ok了,我們分別啟動3個微服務,其中訂單模組使用debug模式進行啟動,然後使用postman進行訪問測試:

7.1、進入斷點,我們看下order對應的資料庫中的管理seata日誌的表資訊和貨源表中的資訊:

7.2、我們看到訂單表中已經生成關於seata的資訊,當然貨源,使用者中都有:

7.3、然後我們看下貨源表中的庫存和使用量:

用之前的庫存10變成了9;

然後再走一下斷點,可以看到使用者表中的賬戶由1000變成900;

7.4、最後,我們看到程式碼中一定會報錯的,然後我們執行完之後,看下資料庫中資料的變化:

首先控制檯打印出錯誤資訊:

然後,看下訂單資料庫中seata的日誌資訊:可以看到剛才的那條資訊已經沒有了,這表明分散式事務處理結束,同時刪除了這條資訊!

接著在看下,我們其中的seata伺服器的控制檯:這個地方寫得也是很詳細的,執行分散式成功了!

最後,看下3個數據庫中的資訊:

會員的賬戶:回滾成為之前的1000

貨源:回滾成了之前的10和0

訂單表中:刪除了生成狀態是0的訂單,最終沒有生成成功支付的訂單資訊

總結一下:到這裡整個關於1.0版本以上的分散式事務管理Seata測試完成,總的來說,內容很多,而且配置大於編碼,seata的配置很複雜,而且1.0版本是個分界線,存在不同的坑!

同樣,我接下來,還會對1.0以下的一個版本進行配置演示,希望可以幫助到大家,還有就是如果有疑問或者需要程式碼,可以給我留言,大家一定要動手去做,只有這樣才會更加的深刻。

最後感謝大家的支援!

【來源:娛樂小筆記】

宣告:轉載此文是出於傳遞更多資訊之目的。若有來源標註錯誤或侵犯了您的合法權益,請作者持權屬證明與本網聯絡,我們將及時更正、刪除,謝謝。 郵箱地址:newmedia@xxcb.cn