網(wǎng)站建設(shè)費用細(xì)項廣州seo推廣公司
文章目錄
目錄
文章目錄
前言
一、Seata的執(zhí)行流程如下
二、使用步驟
?三、配置微服務(wù)客戶端
總結(jié)
前言
Seata部署指南
Seata 是一款開源的分布式事務(wù)解決方案,致力于提供高性能和簡單易用的分布式事務(wù)服務(wù)。Seata 將為用戶提供了 AT、TCC、SAGA 和 XA 事務(wù)模式,為用戶打造一站式的分布式解決方案。
?
一、Seata的執(zhí)行流程如下
A服務(wù)【訂單微服務(wù)】的TM[事務(wù)發(fā)起者]向TC[seata服務(wù)端]申請開啟一個全局事務(wù),TC就會創(chuàng)建一個全局事務(wù)并返回一個唯一的XID
A服務(wù)開始遠(yuǎn)程調(diào)用B服務(wù)【賬戶微服務(wù)】,此時XID會在微服務(wù)的調(diào)用鏈上傳播
B服務(wù)的RM向TC注冊分支事務(wù),并將其納入XID對應(yīng)的全局事務(wù)的管轄
B服務(wù)執(zhí)行分支事務(wù),向數(shù)據(jù)庫做操作
全局事務(wù)調(diào)用鏈處理完畢,TM根據(jù)有無異常向TC發(fā)起全局事務(wù)的提交或者回滾
TC協(xié)調(diào)其管轄之下的所有分支事務(wù), 決定是否回滾
TM:事務(wù)發(fā)起者【在哪個方法上添加了全局事務(wù)注解的】
TC : 事務(wù)管理器【seata的服務(wù)端】
RM: 每個操作數(shù)據(jù)庫的微服務(wù)
XID: 全局事務(wù)id
二、使用步驟
(1)下載seata1.3.0--->
支持集群模式 把開源項目的源碼也下一下
?
?
?
?修改conf/file.conf?讓seata集群信息可以共享,我們應(yīng)該修改它的保存位置:
?
?
?
?
?
?指定seata的注冊中心地址和配置中心的內(nèi)容
?
registry {# file 、nacos 、eureka、redis、zk、consul、etcd3、sofatype = "nacos"nacos {application = "seata-server"serverAddr = "127.0.0.1:8848"group = "SEATA_GROUP"namespace = "88aa134e-24e9-45ab-a336-6ba2ce63a913"cluster = "default"username = "nacos"password = "nacos"}eureka {serviceUrl = "http://localhost:8761/eureka"application = "default"weight = "1"}redis {serverAddr = "localhost:6379"db = 0password = ""cluster = "default"timeout = 0}zk {cluster = "default"serverAddr = "127.0.0.1:2181"sessionTimeout = 6000connectTimeout = 2000username = ""password = ""}consul {cluster = "default"serverAddr = "127.0.0.1:8500"}etcd3 {cluster = "default"serverAddr = "http://localhost:2379"}sofa {serverAddr = "127.0.0.1:9603"application = "default"region = "DEFAULT_ZONE"datacenter = "DefaultDataCenter"cluster = "default"group = "SEATA_GROUP"addressWaitTime = "3000"}file {name = "file.conf"}
}config {# file、nacos 、apollo、zk、consul、etcd3type = "nacos"nacos {serverAddr = "127.0.0.1:8848"namespace = "88aa134e-24e9-45ab-a336-6ba2ce63a913"group = "SEATA_GROUP"username = "nacos"password = "nacos"}consul {serverAddr = "127.0.0.1:8500"}apollo {appId = "seata-server"apolloMeta = "http://192.168.1.204:8801"namespace = "application"}zk {serverAddr = "127.0.0.1:2181"sessionTimeout = 6000connectTimeout = 2000username = ""password = ""}etcd3 {serverAddr = "http://localhost:2379"}file {name = "file.conf"}
}
?
?
?然后
?
然后?
?三、配置微服務(wù)客戶端
?
?在每個微服務(wù)中添加seata依賴
? ?<!--seata 一定要保證和seata服務(wù)的版本匹配-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>com.alibaba.cloud</groupId>
? ? ? ? ? ? <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
? ? ? ? </dependency>
修改配置文件
?
最后要在需要的業(yè)務(wù)層 添加全局事務(wù) 當(dāng)做tm
@GlobalTransactional //全局事務(wù) tm隊長 全局事務(wù)
回滾其他微服務(wù)連接數(shù)據(jù)庫。public void saveOrder(Order order) {log.info("-------->開始創(chuàng)建新訂單");orderDao.saveOrder(order);log.info("-------訂單微服務(wù)開始調(diào)用賬戶,做扣減");accountFeign.increase(order.getUserId(),order.getMoney()); //事務(wù)提交log.info("-------訂單微服務(wù)開始調(diào)用賬戶,做扣減end");int c=10/0;log.info("--------訂單微服務(wù)開始調(diào)用庫存,做扣減");storageFeign.increase(order.getProductId(),order.getCount());log.info("-------訂單微服務(wù)開始調(diào)用庫存,做扣減end");log.info("-------修改訂單狀態(tài)");orderDao.updateStatus(order.getId());log.info("-------修改訂單狀態(tài)結(jié)束");log.info("--------下訂單結(jié)束了,哈哈哈哈");}
?
?
?
?
總結(jié)
無