SpringCloudAlibaba--Seata簡單案例(三)

測試

數據庫的初始情況:

  • seata_order.t_order:
    在這裏插入圖片描述

  • seata_storage.t_storage: 1號商品總數100,0個售出,實存100.
    在這裏插入圖片描述

  • seata_account.t_account: 1號用總金額1000,使用0,餘額1000.
    在這裏插入圖片描述

正常下單

啓動nacos、sentinel、seata以及2001、2002、2003微服務 :
在這裏插入圖片描述
訪問:localhost:2001/order/create?userId=1&productId=1&count=10&money=100
在這裏插入圖片描述
訂單表:
在這裏插入圖片描述
庫存表:
在這裏插入圖片描述
賬戶:
在這裏插入圖片描述
正常下單成功。

超時異常,沒加@GlobalTransaction

AccountServiceImpl添加超時:
在這裏插入圖片描述

再次訪問:localhost:2001/order/create?userId=1&productId=1&count=10&money=100
在這裏插入圖片描述
報錯,因爲OpenFeign默認調用時限爲1秒。

查看數據庫:

訂單表:插入了數據,但是因爲accountService報錯,所以status未修改
在這裏插入圖片描述
庫存表:出現嚴重錯誤,下單失敗商品不翼而飛…
在這裏插入圖片描述
賬戶表:出現嚴重錯誤,下單失敗,但是扣錢了,錢貨兩空…
在這裏插入圖片描述

總結:當庫存和賬戶金額扣減後,訂單狀態沒有設置爲已經完成,沒有從0改爲1,而且由於feign的重試機制,賬戶餘額還有可能被多次扣減。

超時異常,添加@GlobalTransactional

在OrderServiceImpl上添加@GlobalTransactional
在這裏插入圖片描述

再次訪問:localhost:2001/order/create?userId=1&productId=1&count=10&money=100
在這裏插入圖片描述
查看數據庫:

訂單表:未插入數據
在這裏插入圖片描述
庫存表:未修改
在這裏插入圖片描述
賬戶表:未修改
在這裏插入圖片描述
結論:下單後數據庫並沒有任何改變,分佈式事務控制成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章