Springcloud中的分布式事務(wù)怎么利用seata實現(xiàn)?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
Seata 是一款開源的分布式事務(wù)解決方案,致力于提供高性能和簡單易用的分布式事務(wù)服務(wù)。
大致上seata分為TC,TM,RM三大構(gòu)建成整體。它們之間的包含關(guān)系如下。即一(xid主鍵編碼,記錄信息)帶三(TC,TM,RM)
下面之間構(gòu)建項目進行測試。
1.下載seata并解壓,然后改動配置文件。
http://seata.io/zh-cn/blog/download.html官網(wǎng)下載。
解壓之后到conf中修改file和registry文件,修改之前一定記得先備份。
file.conf,改動兩個地方
將group后面的參數(shù)定義一個名字,隨意
存儲方式選db放在數(shù)據(jù)庫,自然其配置信息根據(jù)自己的數(shù)據(jù)庫去填寫。
然后是register文件,填寫信息將seata注冊到nacos中。
啟動自然是在bin中打開bat文件即可,注意需要先啟動naco。
2.構(gòu)建項目(order,storage,account)
演示整體的服務(wù)調(diào)用還有服務(wù)報錯的時候進入回滾。通過創(chuàng)建訂單->檢查庫存并扣除->檢查賬戶并扣除->修改訂單狀態(tài)
具體代碼可查看GitHub
https://github.com/MaTsukun/springcloud2020
關(guān)鍵的service方法
@Service @Slf4j public class OrderServiceImpl implements OrderService{ @Resource private OrderMapper orderMapper; @Resource private StorageService storageService; @Resource private AccountService accountService; @Override @GlobalTransactional(name="abc-create-order",rollbackFor = Exception.class) public void create(Order order){ //1.創(chuàng)建訂單 log.info("開始創(chuàng)建訂單"); orderMapper.create(order); //2.減少庫存 log.info("查詢庫存并且進行更改"); storageService.decrease(order.getProductId(),order.getCount()); //3.扣除費用 log.info("查詢余額并扣除費用"); accountService.updateAccount(order.getUserId(),order.getMoney()); //4.修改狀態(tài) log.info("更改訂單狀態(tài)"); orderMapper.update(order.getUserId(),0); log.info("訂單結(jié)束,O(∩_∩)O哈哈~"); } }
名稱欄目:Springcloud中的分布式事務(wù)怎么利用seata實現(xiàn)-創(chuàng)新互聯(lián)
文章位置:http://www.rwnh.cn/article4/djphoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、品牌網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、搜索引擎優(yōu)化、建站公司、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)